web-dev-qa-db-ja.com

JDBCドライバーMS Access接続

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]データソース名が見つからず、デフォルトのドライバーが指定されていません

8
artiny

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)になります

13
Anthony O.

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();
    }
}
2
Azad

同様の質問に答えました ここにリンクの説明を入力してください しばらく前。

基本的にそのとき:

  1. 32ビットJavaからJDBC-ODBCブリッジを介してMs-Accessに接続できます。
  2. 64ビットJavaからJDBC-ODBCを介して32ビットOdbcドライバーに接続できませんでした。 32ビットのプログラムからのみ接続できることを伝えるメッセージがありました
  3. Microsoftは64ビットMs-Accessドライバーを提供していますが、Javaの64ビットJDBC-ODBCドライバーでは機能しませんでした。

それ以来、新しいオープンソースのMs-Access JDBCドライバー Ms-Access JDBCドライバー があるようです。それがどれほど良いか、私にはわからない。

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

あなたはちょうどここであなたのコードに何かが欠けています:

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

{}Driver=の間に)=;を追加する必要があります。このように

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