Создание подключения без DSN для MS Access в Java - PullRequest
6 голосов
/ 16 февраля 2011

Я создаю настольное приложение, которое должно взаимодействовать с базой данных MS Access. Теперь, если я не хочу зарегистрировать DSN для базы данных на каждом компьютере, на котором будет использоваться приложение для настольных компьютеров, мне нужен способ подключения к базе данных без DSN.

Я много раз искал и нашел несколько полезных ссылок на о том, как создавать строки подключения , и на этом основании я пытался модифицировать свою программу на основе этого, но безуспешно. Код ниже не работает. Если я переключаю строку в getConnection на «jdbc: odbc: sampleDB», это работает, но это использует DSN, а не то, чего я хочу достичь.

Как мне написать и использовать строку подключения в Java для создания подключения без DSN к базе данных MS Access?

private Connection setupConnection() throws ClassNotFoundException,
        SQLException {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con = DriverManager.getConnection("Driver={Microsoft Access Driver (*.mdb)} &_ Dbq=c:\\as\\sampleDB.mdb");
    return con;
}

Дополнение: Я также хотел бы отметить, что если у кого-то есть идея, как добиться того, о чем я просил С помощью DSN-соединения, я с удовольствием выслушаю его!

Ответы [ 2 ]

5 голосов
/ 16 февраля 2011

Строка соединения JDBC должна начинаться с jdbc: как:

jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\Nwind.mdb

так что попробуйте:

   Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\\as\\sampleDB.mdb");

Если вы настроили DSN, вы можете подключиться к нему, используя более простую строку подключения: jdbc:odbc:[alias], пример:

jdbc:odbc:northwind
1 голос
/ 05 июля 2013

У меня тоже была эта проблема, и я попробовал многие предложения здесь и на разных форумах.Наконец, я обнаружил фрагмент из одного места, который привел к успешному подключению, а также объясняет, почему многие из этих сообщений не работают.См. 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 пользователя на моем компьютере.

...