私もこの問題を抱えていて、ここやさまざまなフォーラムで多くの提案を試しました。最後に、ある場所から接続に成功したスニペットを発見し、これらの投稿の多くが機能しない理由も説明しています. http://www.coderanch.com/t/295299/JDBC/databases/jdbc-odbc-DSN-connection-MSを参照してください。
問題は、 jdbc:odbc:;Driver= のように、odbc の最後にあるコロンの後にセミコロンが必要なことです。これは、構文が jdbc:odbc:dsn; であると述べられている JdbcOdbc ブリッジに関する Oracle ドキュメントを読んだ後、意味がありました。attributes....... DSN を提供していないため、; で終了する必要があります。属性を追加する前に。
Windows 7 Ultimate 32 ビット マシンでさまざまな接続文字列を使用して実行したテストを以下に示します。
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 データベース」は、私のコンピュータのユーザー DSN として ODBC レジストリで有効なタイトルであるため、機能します。