web-dev-qa-db-fra.com

Pilote JDBC, connexion MS Access

Je veux connecter mon fichier MS Access avec le programme d'interface graphique Java, mais j'ai un problème de connexion ....

J'ai Windows 7 64b et ms office 2007 . Lorsque j'ai ouvert le gestionnaire de pilotes ODBC dans le panneau de configuration, je n'ai trouvé aucun pilote pour Microsoft Access (peut-être lorsque j'ai démarré le ODBC a commencé à utiliser ODBC 64 bits, maintenant je pense qu’il exécute ODBC 32 bits. Je lis ceci et je le fais: "Connexion jdbc-odbc pour la machine Windows 7 64 bits .. 1. Clic droit sur la source de données (ODBC) .. aller aux propriétés changer la chose suivante

target [% SystemRoot%\SysWOW64\odbcad32.exe] démarrer dans: [% SystemRoot%\System32]

appuyez sur Entrée et continuez en tant que source admin: lien source ") Maintenant, lorsque je démarre dans le panneau de configuration, le ODBC je peux voir le pilote screenshoot

Mon code de programme (j'ai essayé de deux manières mais j'ai la même erreur):

        public void Connect() {
        try {
            Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver");

 //    String DatabaseFile = "D:Java/Invertory.mdb";       
//            String DATABASE =
//                    "jdbc:odbc:Driver="
//                    + "{Microsoft Access Driver (*.mdb, *.accdb)};"
//                    + "DBQ=" + DatabaseFile;`enter code here`
 String DATABASE ="jdbc:odbc:Driver= Microsoft Access Driver (*.mdb, *.accdb);DBQ=Invertory.mdb";
           CONEX = DriverManager.getConnection(DATABASE);

        } catch (Exception X) {
          X.printStackTrace();
            //JOptionPane.showMessageDialog(null,e);
        }
    }

erreur

Java.sql.SQLException: Nom de source de données [Microsoft] [Gestionnaire de pilotes ODBC] introuvable et aucun pilote par défaut spécifié

8
artiny

Utilisez UCanAccess Pilote JDBC:

Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://<mdb or accdb file path>",user, password); 
for example: 
Connection conn=DriverManager.getConnection("jdbc:ucanaccess://c:/pippo.mdb");

Donc, pour votre exemple, ce sera Connection conn=DriverManager.getConnection("jdbc:ucanaccess://"+path)

12
Anthony O.

Si vous utilisez Windows 64 bits, vous devrez probablement accéder à ce chemin.

C: /Windows/SysWOW64/odbcad32.exe

Ensuite, j’ai remarqué que vous utilisiez le chemin direct à la place pour créer un nouveau System DSN; votre chemin direct est correct jusqu’à ce que le chemin du fichier access vous deviez donner le chemin complet de la manière suivante:

jdbc: odbc: pilote = pilote Microsoft Access (* .mdb, * .accdb); DBQ = chemin/vers/Invertory.mdb "

Pour obtenir le chemin, vous devez probablement utiliser Java.io.File avec une méthode qui renvoie le chemin absolu du fichier, voir l'exemple:

import Java.sql.*;
public class TestConnection {
    Connection con ;
    Statement st ;
    ResultSet rs ;
    String db;
    public TestConnection (){
        try{
            String path = new Java.io.File("Invertory.mdb").getAbsolutePath();
        db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;
            doConnection();
        } catch(NullPointerException ex){
                ex.printStackTrace();
            }

    }

    public void doConnection(){
        try{
            Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver");
            con = DriverManager.getConnection(db);
            st = con.createStatement();
            rs = st.executeQuery("select * from Invertory");
            while(rs.next()){
                System.out.println(rs.getObject(1));
            }
        }catch(SQLException | ClassNotFoundException ex){
            System.out.println(ex.toString());

        }

    }
    public static void main(String...argS){
        new TestConnection();
    }
}
2
Azad

J'ai répondu à une question similaire entrez la description du lien ici il y a quelque temps.

Fondamentalement à cette époque:

  1. Vous pouvez vous connecter à Ms-Access à partir de Java 32 bits via le pont JDBC-ODBC.
  2. Vous ne pouviez pas vous connecter à un pilote Odbc 32 bits via le JDBC-ODBC à partir de Java 64 bits. Il y avait un message vous disant que vous ne pouvez vous connecter qu'à partir d'un programme 32 bits
  3. Bien que Microsoft fournisse un pilote Ms-Access 64 bits, il ne fonctionnait pas avec le pilote JDBC-ODBC 64 bits de Java.

Depuis lors, il semble y avoir un nouveau pilote JDBC Ms-Access open-source Pilote JDBC Ms-Access . Je n'ai aucune idée à quel point c'est bon.

2
Bruce Martin
final String fileName = "c:/myDataBase.mdb"
Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+fileName;
Connection con = DriverManager.getConnection(url,username,password);
0
Avijit Das

Il vous manque juste quelque chose dans votre code juste ici: 

db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;

Vous devez ajouter {} entre Driver= et )=;. Comme ci-dessous

db ="JDBC:ODBC:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+path;
0
KaJasB