У меня тоже была эта проблема, и я попробовал многие предложения здесь и на разных форумах.Наконец, я обнаружил фрагмент из одного места, который привел к успешному подключению, а также объясняет, почему многие из этих сообщений не работают.См. http://www.coderanch.com/t/295299/JDBC/databases/jdbc-odbc-DSN-connection-MS
Проблема в том, что после двоеточия в конце odbc должна быть точка с запятой, как в jdbc: odbc:; Driver =.Это имело смысл после прочтения документации Oracle по мосту JdbcOdbc, в которой говорится, что синтаксис: jdbc: odbc: dsn;атрибуты ....... Так как мы не предоставляем DSN, нам нужно закончить;перед добавлением атрибутов.
Ниже показаны тесты, которые я выполнял с разными строками подключения на 32-битной машине с Windows 7 Ultimate:
driver= (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
//jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ= does lookup to ODBC.ini to find matching driver
try {
connstr= "jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn= DriverManager.getConnection(connstr, "", "");
stmt= conn.createStatement();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn1= DriverManager.getConnection(connstr, "", "");
stmt1= conn1.createStatement();
dbmeta1=conn1.getMetaData();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:MS Access Database;DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn2= DriverManager.getConnection(connstr, "", "");
stmt2= conn2.createStatement();
dbmeta2=conn2.getMetaData();
}
catch (Exception e){}
try {
connstr= "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + fileURI; //64 bit ?? (*.mdb,*.accdb)
conn3= DriverManager.getConnection(connstr, "", "");
stmt3= conn3.createStatement();
dbmeta3=conn3.getMetaData();
}
catch (Exception e){}
stmt1 и stmt3 равны нулю, поскольку соединения равны нулю.STMT и STMT2 работают.stmt2 использует строку подключения, которую я нашел в документации по IBM Tivoli.Это работает, потому что «База данных MS Access» является действительным названием в реестре ODBC как DSN пользователя на моем компьютере.