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é
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)
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();
}
}
J'ai répondu à une question similaire entrez la description du lien ici il y a quelque temps.
Fondamentalement à cette époque:
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.
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);
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;