Ciao a tutti,
è la prima volta che chiedo aiuto in questo forum per cui mi scuso in anticipo per eventuali inadempienze e/o imprecisioni.
Veniamo al dunque: io e il mio gruppo universitario abbiamo dovuto ideare un progetto per il corso di basi di dati con relativa interfaccia grafica java in grado di collegarsi al database da noi ideato.
In soldoni il nostro programma si basa su MySQL, ogni volta che l'applicazione parte controlla che il database (nome prefissato) esista: se non esiste lo crea, riempie le tabelle e genera trigger e procedure; se esiste non fa nulla e apre una schermata di login che porterà alle fasi successive del programma.
Per creare tabelle, riempirle e aggiungere trigger e procedure abbiamo ideato degli script .sql appositi che vengono dati in pasto nel punto giusto del programma al metodo runScript della classe ScriptRunner (classe da noi trovata sul web e adattata alle nostre esigenze).
Tale metodo ha solo bisogno di ricevere in input il percorso assoluto/relativo del file .sql.
Ed è qui che viene il bello: noi usiamo Netbeans come IDE, facendo partire il programma con una semplice RUN funziona tutto alla perfezione mente quando andiamo a creare il file .jar relativo (cosa che vogliamo/dobbiamo fare per portabilità del programma su varie macchine su richiesta del professore) non trova i suddetti file .sql.
per maggior chiarezza posto l'organizzazione delle directory del progetto e un pezzo di codice per semplificare la comprensione
(PS: io sto lavorando su Ubuntu attualmente ma lo stesso problema si ha su windows tale e quale):
Frammento di codice che crea il database a runtime:
Organizzazione directory progetto:codice:package progettobd2011; import java.sql.*; import java.io.*; import java.net.URL; /** * Dipende da ScriptRunner.java * */ public class Db_Connection { private String driver; private String url; private String user; private String pass; private Connection conn; private Statement stmt; private String query; public Db_Connection (String driver,String url,String user,String pass) { this.driver= driver; this.url=url; this.user=user; this.pass=pass; this.query=""; } public void Mod_Settings (String driver,String url,String user,String pass) { if (driver!= "") this.driver= driver; if (driver!= "") this.url=url; if (driver!= "") this.user=user; if (driver!= "") this.pass=pass; } /** * Apre la connessione al DB * */ public /*void*/boolean Open_Conn () { try{ Class.forName(driver);//caricamento driver System.out.println("Driver convalidati"); conn = DriverManager.getConnection(url,user,pass);//crezionze connessione al DB System.out.println("Ok, sono connesso al DB"); stmt=conn.createStatement(); } catch (ClassNotFoundException e) { //caso driver non trovati System.out.println("Drivers not found"); } catch (SQLException e) { //sintassi query non corretta e.printStackTrace(); return false ; } return true ; } /** * Inizializza il database alla prima esecuzione del programma * */ public void Init_DB() { Open_Conn(); int ERR = Ins_Up_SQL("SHOW CREATE DATABASE ProgettoBD2011"); Close_Conn(); System.out.println(ERR); if (ERR == 0) //Il database non esiste, va creato... { System.out.println("Creazione"); Open_Conn(); Ins_Up_SQL("create database ProgettoBD2011 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"); Close_Conn(); url+="/ProgettoBD2011"; Open_Conn(); ScriptRunner r = new ScriptRunner(conn, false, true); try{ URL fileURL= getClass().getClassLoader().getResource("progettobd2011/CreazioneDB.sql"); System.out.println(fileURL); String file= fileURL.getPath(); r.runScript(new BufferedReader(new FileReader(file)));
(Queste le più importanti se vi serve altro che manca provvederò a postare tutto)codice:Scrivania -> ProgettoBD2011 ->src ->progettobd2011 -><tutti file .java,.sql,.png> -> build ->classes -><tutti i file .sql,.class e .png del programma> ->mysql-connector -><file .jar e altri del driver mysql completamente funzionante> ->dist(cartella dove viene creato di default il .jar del programma) ->ProgettoBD2011.jar (nell'archivio) ->progettobd2011 -><esatta copia dei file .class, .sql e .png citati sopra in src> ->META-INF(contiene il MANIFEST.MF che se volete vi posto) ->lib -><collegamento al driver mysql sopracitato> ->nbproject -><contiene a file di configurazione che forse non c'entrano>

Rispondi quotando

