MS AccessファイルをJava GUIプログラムで接続したいのですが、接続に問題があります。..
Windows 7 64bとms office 2007があります。コントロールパネルでODBCドライバーマネージャーを開いたとき、Microsoft Access用のドライバーが見つかりませんでした(おそらくODBCは64ビットODBCの実行を開始しましたが、現在は32ビットODBCを実行していると思います。これを読んで作成します。「ウィンドウ7 64ビットマシンのjdbc-odbc接続」。 )..プロパティに移動して次のことを変更します
ターゲット[%SystemRoot%\ SysWOW64\odbcad32.exe]開始:[%SystemRoot%\ System32]
enterキーを押して、管理ソースとして続行します。 source link ")ここで、コントロールパネルで開始すると、ODBCドライバーが表示されます screenshoot
私のプログラムコード(2つの方法を試しましたが、同じエラーがあります):
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);
}
}
エラー
Java.sql.SQLException:[Microsoft] [ODBC Driver Manager]データソース名が見つからず、デフォルトのドライバーが指定されていません
CanAccess JDBC Driverを使用します。
_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");
_
したがって、あなたの例ではConnection conn=DriverManager.getConnection("jdbc:ucanaccess://"+path)
になります
Windows 64ビットを使用している場合、おそらくこのパスに移動する必要があります
C:/Windows/SysWOW64/odbcad32.exe
次に、新しいSystem DSN
を作成する代わりに直接パスを使用していることに気付きました。直接パスはaccessファイルへのパスまで正しいので、次のようにフルパスを指定する必要があります。
jdbc:odbc:Driver = Microsoft Access Driver(* .mdb、*。accdb); DBQ = path/to/Invertory.mdb "
パスを取得するには、おそらくメソッドへの絶対パスを返すJava.io.File
を使用する必要があります。例を参照してください。
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();
}
}
同様の質問に答えました ここにリンクの説明を入力してください しばらく前。
基本的にそのとき:
それ以来、新しいオープンソースのMs-Access JDBCドライバー Ms-Access JDBCドライバー があるようです。それがどれほど良いか、私にはわからない。
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);
あなたはちょうどここであなたのコードに何かが欠けています:
db ="JDBC:ODBC:Driver=Microsoft Access Driver (*.mdb, *.accdb); DBQ="+path;
{}
とDriver=
の間に)=;
を追加する必要があります。このように
db ="JDBC:ODBC:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+path;