Driver per connettersi con accdb cioè access 2007

di il
12 risposte

Driver per connettersi con accdb cioè access 2007

Ciao Vi sottopongo subito un problemone. Per fare la prima veloce prova ho creato un veloce database in Access 2007 perché ho solo quello sul pc e cosi' ho scaricato una pillola che si collega al database e legge tutto quello che c'e' dentro una tabella restiuendola. Pero' c'e' un problema l'odbc di access 2007 non è riconosciuto e non mi riconosce il driver Come devo fare?

12 Risposte

  • Re: Driver per connettersi con accdb cioè access 2007

    Posto il codice:
  • Re: Driver per connettersi con accdb cioè access 2007

    Import javax.swing.JOptionPane;

    import java.io.FileWriter;
    import java.sql.*;

    public class test{
    /* IMPORTANTE!!!
    *
    * Prima di tutto bisogna impostare l'origine dati in windows tra le variabili ODBC.
    *
    * Pannello di controllo -> strumenti di amministrazione -> origine dati (odbc) -> in DSN utente
    * fare aggiungere e in nome origine dati mettere il nome del DB, es. prova.mdb, poi clickare su "seleziona" e inserire il path del DB.
    *
    * Senza queste impostazioni non ci si può connettere al db, il programma non trovare i driver e lo stesso DB.
    */

    //il nome del DB cui accedere
    String url="jdbc:odbc:provajava.accdb";
    Connection con;

    public test(){
    openConnection();
    }

    //metodo per effettuare qualsiasi query sul DB
    public ResultSet query(String query){
    try{
    Statement stmt=con.createStatement();
    ResultSet rs=stmt.executeQuery(query);
    System.out.println("ok");
    return rs;
    }catch(SQLException e){
    JOptionPane.showMessageDialog(null,"Interrogazione fallita: "+e.getMessage(),"Messaggio:",0,null);
    closeConnection();
    return null;
    }
    }
    public void update(String update){
    try{
    Statement stmt=con.createStatement();
    stmt.executeUpdate(update);
    }catch(SQLException e){
    JOptionPane.showMessageDialog(null,"Interrogazione fallita: "+e.getMessage(),"Messaggio:",0,null);
    closeConnection();
    }
    }

    //apre la connessione col DB
    public void openConnection(){
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }catch(ClassNotFoundException e){
    JOptionPane.showMessageDialog(null,"Driver per database non trovato: "+e.getMessage(),"Messaggio:",0,null);
    }try{
    con = DriverManager.getConnection(url,"admin","12440");//eventualmente user e password, se il DB è rpotetto da password, admin è di default
    }catch(SQLException e){
    JOptionPane.showMessageDialog(null,"Connessione Fallita: "+e.getMessage(),"Messaggio:",0,null);
    }
    }

    //chiude la connessione col DB
    public void closeConnection(){
    try{
    con.close();
    System.out.println("connessione chiusa");
    }catch(SQLException e){
    JOptionPane.showMessageDialog(null,"Connessione Fallita: "+e.getMessage(),"Messaggio:",0,null);
    }
    }

    public static void main(String[] args) {
    //esempio lettura

    //apro la connessione
    test t = new test();

    try{
    //eseguo la query ed ottengo un resultset
    ResultSet rslt = t.query("SELECT * FROM Anagraficauten");
    //posso accedere ai metadati
    ResultSetMetaData rsmd=rslt.getMetaData();

    int i=rsmd.getColumnCount(); //trova il numero di colonne

    //leggo tutti i dati e li stampo a video
    while(rslt.next()){
    for(int j=1;j<=i;j++){
    System.out.print(rslt.getString(j)+" -- ");
    }
    System.out.println("");
    }

    //chiudo il resultset
    rslt.close();
    //chiudo la connessione al DB
    t.closeConnection();
    }
    catch(Exception ez){
    ez.printStackTrace();
    System.err.println("errore della query");
    }

    }
    }
  • Re: Driver per connettersi con accdb cioè access 2007

    L'errore che mi da' che non trova il driver ma l'ho correttamente impostato in sorgente odbc
  • Re: Driver per connettersi con accdb cioè access 2007

    Lorena ha scritto:


    L'errore che mi da' che non trova il driver ma l'ho correttamente impostato in sorgente odbc
    Da Java 8 in poi il driver "ponte" JDBC-ODBC purtroppo è stato rimosso (e definitivamente) dal runtime Java e quindi non è più possibile usarlo.

    Il riferimento ufficiale: Compatibility Guide for JDK 8:
    Starting with JDK 8, the JDBC-ODBC Bridge is no longer included with the JDK. [...]
    Se vuoi continuare con Access devi usare un driver JDBC di terze-parti, come quello spesso citato UCanAccess. Ma devi valutare se/quanto/come "impatta" su quanto puoi aver già scritto come codice per l'accesso ai dati.
  • Re: Driver per connettersi con accdb cioè access 2007

    Grazie allora credo che rinuncio era solo un programma di prova Credo che mi prendo un bel libro di programmazione in java ed inizio con i fondamentali. Un altra domanda per favore: ma i driver per connettersi con Excel invece sono previsti? Grazie
  • Re: Driver per connettersi con accdb cioè access 2007

    Lorena ha scritto:


    Un altra domanda per favore: ma i driver per connettersi con Excel invece sono previsti?
    Con il driver JdbcOdbcDriver (quello appunto rimosso in Java 8 ) mi pare che fosse possibile tramite ODBC. Sono certo di aver visto in passato qualche stralcio di codice a riguardo ma ora non saprei dire bene.
    Tolto il JdbcOdbcDriver, non so se esistono dei driver di terze parti per Excel. Basta comunque fare qualche ricerca in rete. Un foglio Excel in effetti è molto assimilabile ad una tabella, quindi non è una cosa poi così stramba a livello concettuale.

    Chiaramente JDBC è e resta la API basilare per l'accesso a database relazionali che espongono un linguaggio SQL. Qualunque altro truschino per accedere ad altre cose è ovviamente un "di più" che può essere più o meno valutabile/discutibile.

    Lorena ha scritto:


    Credo che mi prendo un bel libro di programmazione in java ed inizio con i fondamentali.
    Sì, credo sia molto meglio. Dimentica (per un bel po') JDBC, database, excel, driver, ecc. e parti "bene" dalle basi. Credimi ... non te ne pentirai.
  • Re: Driver per connettersi con accdb cioè access 2007

    Grazie Andrea. Mi permetto di eccepire contro chi ha tolto il driver JdbcOdbc. Infatti io faccio delle piccole lezioncine di Java per guadagnare qualche cosa e che non fanno spendere un capitale agli studenti e fare qualche gesionalino di prova su access o Excel poteva essere istruttivo ed economico
  • Re: Driver per connettersi con accdb cioè access 2007

    Lorena ha scritto:


    Mi permetto di eccepire contro chi ha tolto il driver JdbcOdbc. Infatti io faccio delle piccole lezioncine di Java per guadagnare qualche cosa e che non fanno spendere un capitale agli studenti e fare qualche gesionalino di prova su access o Excel poteva essere istruttivo ed economico
    Invece hanno fatto bene: il bridge JDBC-ODBC era bacato e portava innumerevoli problemi in produzione (l'ho usato per anni e i problemi c'erano). ODBC è una "bella" tecnologia, ma quel driver era davvero mal messo. Non ne sento alcuna mancanza: si fa tutto (e meglio) con gli appositi driver.

    PS: Excel non è un DBMS e non andrebbe usato come tale... l'astrazione data da ODBC in tal senso, oltre ad essere diseducativa (quindi l'esatto opposto di quel che fai tu, cioè lezioncine) è oltremodo scomoda. Laddove serva usare un DBMS si usa un DBMS non un foglio di calcolo (che serve a tutt'altro ed ha tutt'altre librerie per interfacciarvisi: Apache POI in primis).


    Ciao.
  • Re: Driver per connettersi con accdb cioè access 2007

    Giusto
  • Re: Driver per connettersi con accdb cioè access 2007

    Forse mi sfugge qualcosa, ma non ho ancora capito come si deve fare ad utilizzare un db access, in rete si trovano solo esempi che usano i driver non più disponibili.
  • Re: Driver per connettersi con accdb cioè access 2007

    patel ha scritto:


    non ho ancora capito come si deve fare ad utilizzare un db access, in rete si trovano solo esempi che usano i driver non più disponibili.
    L'ho detto prima: il driver UCanAccess
  • Re: Driver per connettersi con accdb cioè access 2007

    Grazie, mi era sfuggito
Devi accedere o registrarti per scrivere nel forum
12 risposte