Проблемы с JDBC-ODBC, строками подключения без DSN и 64-битной Windows 7 - PullRequest
2 голосов
/ 28 сентября 2010

Я имею дело с проблемой, которая возникла для приложения, над которым я работаю, которое подключается к файлу Access через JDBC-ODBC.На других платформах Windows эта проблема не встречалась, но в 64-разрядных блоках Windows 7 при попытке подключения с использованием строк подключения без DSN возвращается:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

Попытка нескольких вариантов строки, но все они вернули одну и ту же ошибку.Вот как он пытается подключиться в данный момент:

  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  StringBuffer databaseConnectionString;

  if (SystemUtils.IS_OS_WINDOWS_7) {
       databaseConnectionString = new StringBuffer("jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=");
       databaseConnectionString.append(databaseFile);

  } else {
       databaseConnectionString = new StringBuffer("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=");
       databaseConnectionString.append(databaseFile);
       databaseConnectionString.append(";DriverID=22;READONLY=false}");
  }

Проверка драйвера в 32-разрядном ODBC Data Source Admin подтверждает, что драйверы присутствуют.Однако когда regedt32.exe используется для проверки драйверов ODBC (HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI/ODBC Drivers), ни один из них не появляется.

Может ли кто-нибудь помочь пролить свет на это?

Ответы [ 2 ]

3 голосов
/ 29 сентября 2010

Я обнаружил, что проблема заключалась в том, что я запускал программу на 64-битной Java.Хотя мне еще не удалось успешно определить, работает ли программа в 32-битной или 64-битной Java, я решил это решение, установив 32-битную среду выполнения Java и используя файл .bat, который выглядит следующим образом:

@echo off

"C:\Program Files (x86)\Java\jre6\bin\java" -D32 -Xmx1024m -jar programName.jar

Спасибо за помощь!

0 голосов
/ 10 августа 2013

Это была трудная задача, учитывая нехватку значимых сообщений об ошибках от JAVA или драйвера ODBC от MS. Ответы выше о выборе 32-битных драйверов Java и MS Access (с использованием AccessDatabaseEngine.exe от MS) сработали, но стоили значительного штрафа (около 30%) при обработке других действий по сравнению с использованием 64-битной Java. Я не хотел платить эту цену, поэтому я установил 64-битную Java (вместе с 32-битной, оба в отдельном каталоге c: \ Java \ 32 или 64). Эта последняя проблема каталога была для меня важна, так как я использовал Apache Geronimo, и она не запустилась бы, если бы Java была установлена ​​в Program Files (x86) ... так как (x86), казалось, убивала его анализ командного файла. Затем я удалил 32-разрядный MS Access и установил 64-разрядный MS Access (AccessDatabaseEngine_x64.exe). Наконец, он работал как с более высокой скоростью, так и с соединением MDB.

...