PDA

View Full Version : [JAVA E DB ACCESS] Accedere a DB Access


serpico84
20-10-2009, 11:20
Devo creare una procedura che in ingresso prende il path che contiene la destinazione del file .mdb Access (facciamo finta che già si conosca questo path) e che, se il path è esatto, accede al database (quindi penso mi servano i driver per caricare il db access)...qualcuno può darmi una mano??:mc:

SodoMyzer
20-10-2009, 13:18
Lo feci un pò di tempo fa...e nn ricordo bene il tutto ...comunque...
Dal basso della mia scarsa esperienza:
potresti creare una variabile di sistema in Pannello di controllo-Sistema-(Scheda AVANZATE),in basso a sx c'è il bottone "Variabili d'ambiente",
oppure
da Pannello di Controllo-strumenti di amministrazione-Origine dati (ODBC)
e in DSN utente o di sistema nemmeno ricordo, fare AGGIUNGI-Microsoft Access Driver
nella finestra che ti esce metti il nome da richiamare (nel mio caso DbLibri) e settare il percorso lì.
(mi sembra più la seconda)

non ricordo bene come feci...per ora ti posto una vecchia classe che scrissi per il file DbLibri.mdb che usava il DSN
(non il path intero come serve a te...).


public class DBTest
{
public static void main(String[] args)
{
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.err.println("Driver trovato");
}
catch(ClassNotFoundException e)
{
System.out.println(e.toString());
System.out.println("Il driver non può essere caricato");
System.exit(1);
}
}

try
{
Connection conn = DriverManager.getConnection("jdbc:odbc:DbLibri.mdb","","");
System.err.println("Connessione OK!");
Statement stmt = conn.createStatement();
System.err.println("Statement creato");
ResultSet rs = stmt.executeQuery("SELECT TITOLO FROM LIBRO");
System.err.println("Query eseguita");
while(rs.next())
{System.out.println(rs.getString("titolo"));}
//"titolo" è il nome della colonna, volendo possiamo mettere (1) ad esempio
//se vogliamo il valore del primo campo
//Usare gli opportuni "get" (getInt,getDate ecc ecc) a seconda del tipo
rs.close();
stmt.close();
conn.close();
}
catch(SQLException _sql)
{
System.out.println(_sql.getMessage());
_sql.printStackTrace(System.out);
System.exit(1);
}
}


Il fatto di poter scrivere senza percorso completo
DriverManager.getConnection("jdbc:odbc:DbLibri.mdb","","");
si può fare proprio perchè settando una variabile d'ambiente, quando la si richiama è il sistema a indirizzarti nella cartella e al file.
Nel tuo caso, nel creare un metodo che prende in input una stringa del path, al posto di "DbLibri" mi pare che debba andarci tutto il path...prova un pò!
I due campi vuoti alla fine della stringa di connessione dovrebbero essere user e password, che, se ricordo bene, in access non esistono.

serpico84
20-10-2009, 13:45
grazie dell'aiuto fra un po proverò il tuo esempio...ma per caso devo importare qualche libreria al progetto?? Per il momento per come lo sto facendo io mi da questo errore:

java.sql.SQLException: [Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver predefinito non specificato.

Sono molto niubbo nel settore....

serpico84
20-10-2009, 15:24
Ecco la funzione che lancio per il momento

public String avvia() {
recuperoDati();//lancia il recupero dati da file
String risposta = "";
System.out.println("Avvio connessione");
try {
//Carico il Driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
//Indico il database al quale devo connettermi
conn = (Connection) DriverManager.getConnection("jdbc:odbc:DRIVER=Microsoft Access Driver(*.mdb);DBQ=backup19_10_2009.mdb");
System.out.println("Connessione stabilita con il Database");
} catch (InstantiationException ex) {
risposta = "Problema di connessione" + ex.getMessage();
} catch (IllegalAccessException ex) {
risposta = "Problema si connessione" + ex.getMessage();
} catch (ClassNotFoundException e) {
risposta = "Driver non trovato" + e.getMessage();
} catch (SQLException e) {
risposta = "E' stata rilevata SQLException: " + e.getMessage();
}
System.out.println(risposta);
return risposta;
}

per adesso ci metto l'esatta posizione del database su DBQ=backup19_10_2009.mdb (il database è all'interno del progetto altimenti metto c:\\.....)