PDA

View Full Version : [JAVA]-SQL-Caricare file-DB diversi con un click,come?


kinghomer
29-07-2008, 02:00
Il problema è il seguente:

Mi interfaccio tramite Java ad un file database 'eltafidb' di SQLite nel quale sono contenute due sole tabelle.

La classe che uso per le connessioni è la seguente:




import java.sql.*;

public
class ConnectionManager {

public static Connection getConnection() throws SQLException,ClassNotFoundException {

String MY_DRIVER = "org.sqlite.JDBC";
String MY_URL = "jdbc:sqlite:eltafidb";

Class.forName(MY_DRIVER);

Connection temp = DriverManager.getConnection(MY_URL);
temp.setAutoCommit(true);
return temp;
}

}



Ho bisogno di gestire diversi file-DataBase, e di poterli caricare in modo dinamico in run-time. Una specie di:

bottone CARICA DATABASE;

si apre il JFileChooser;

seleziono il file da caricare;

la JTable si riempie e posso fare inserimenti e quant'altro che interessano SOLO quel db caricato.

In questo modo per la classe connessione basta modificare in modo dinamico soltanto MY_URL, e nella fatti specie sostituire "eltafidb" con una nuova stringa che specifica un nuovo file-database con il quale interfacciarsi per inserimenti e quant'altro.

Come si fa tutto ciò?

Tutto è giò pronto e funzionale per un singolo DB statico. Ed ora vorrei capire come rendere il tutto dinamico.
Se avete una soluzione mi postate uno straccio di codice di esempio per favore?
Vi ringrazio in anticipo

gaxy
29-07-2008, 11:56
Scusa, e se tu mettessi nella classe anche un costruttore con qualche argomento, tipo:

import java.sql.*;

public class ConnectionManager {

private String MY_DRIVER, MY_URL;

public ConnectionManager (String _drv, String _url) {
MY_DRIVER = _drv;
MY_URL = _url;
}

public Connection getConnection() throws SQLException,ClassNotFoundException {

Class.forName(MY_DRIVER);

Connection temp = DriverManager.getConnection(MY_URL);
temp.setAutoCommit(true);
return temp;
}

}

Poi ti devi solo ricordare di prevedere un meccanismo di chiusura di ogni connessone (tipo un metodo closeConnection()).

Per la chiamata, alla pressione del tasto istanzi un oggetto ConnectionManager tipo:



ConnectionManager conman = new ConnectionManager("org.sqlite.JDBC", "jdbc:sqlite:eltafidb");

conman.getConnection();
...
conman.closeConnection();



Così potresti scegliere il db in base alla selezione utente... ho capito bene quello che ti serve? :)

kinghomer
29-07-2008, 16:17
si esattamente!
L'unica fregatura è che il metodo getConnection l'ho implementato statico, e quindi dovrei rifare in qualche modo tutte le relative chiamate del getConnection() nelle classi DAO.
Come sempre c'è la fregatura... :muro:

Grazie per l'aiuto ;)

gaxy
29-07-2008, 16:26
Puoi anche lasciar perdere quello che ho scritto prima (mi è venuta un'idea più intelligente :D ): tieniti il metodo statico e aggiungi i parametri:


public static Connection getConnection(String _drv, String _url) throws SQLException,ClassNotFoundException {

String MY_DRIVER = _drv;
String MY_URL = _url;

Class.forName(MY_DRIVER);

Connection temp = DriverManager.getConnection(MY_URL);
temp.setAutoCommit(true);
return temp;
}


Poi devi fare un altro metodo statico closeConnection e gli passi come parametro la connessione corrente...

Così non devi rifare quasi nulla! :cool:

kinghomer
29-07-2008, 18:00
Troppo tardi :P !!!
Ho già riscritto tutto in forma non statica. Poco pulito, ma funzionale.
Grazie per l'aiuto :*

gaxy
30-07-2008, 09:52
Ma prego comunque! Mi spiace che l'altra idea mi è venuta dopo... :) :) :)