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

Я пытаюсь создать простое соединение с помощью моста jdbc-odbc:

public static Connection  getConnection() {
    Connection con =null;
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String conStr = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" +
            "c:\\myfolder\\accesdbfile.accdb";
        con = DriverManager.getConnection(conStr);
    } catch(Exception e) {
        e.printStackTrace();}
    return con;
}

Но затем я получаю это исключение:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0xa4 Thread 0xec0 DBC 0x2f8574c                                                              Jet'.

Есть идеи?

Обновление от 24 марта 2009 г.: Теперь все работает. Создал пользовательский источник данных, и по какой-то причине исключение исчезло.

В качестве общего вопроса: как лучше всего обрабатывать подключения к базе данных в Java?


person Leonardo    schedule 24.03.2009    source источник
comment
comment
@GordThompson Итак, вопрос, созданный 5 лет назад, является возможным дубликатом вопроса, заданного 12 дней назад?   -  person Leonardo    schedule 20.10.2014
comment
Если новый вопрос лучше или содержит лучшие ответы, проголосуйте за закрытие старого вопроса как дубликата нового. (ссылка: здесь)   -  person Gord Thompson    schedule 20.10.2014


Ответы (3)


Чтобы ответить на ваш общий вопрос, я бы сказал, что лучший способ обработки соединений с базой данных в Java - избегать моста JDBC-ODBC. Это нормально для тестирования или изучения JDBC, но не для реального использования в производстве. Кроме того, если у вас есть источник данных, который не имеет собственного драйвера JDBC, но имеет драйвер ODBC, у вас может не быть выбора.

Основная причина, по которой я предлагаю вам держаться подальше от него, заключается в том, что это затрудняет развертывание вашего приложения. Вы должны настроить источник данных на машине, с которой вы запускаете свое приложение. Если у вас есть доступ к машине, нет проблем, но предположим, что вы отправляете приложение клиенту? Чистый драйвер Java JDBC лучше подходит для этого, потому что он включен как часть вашего приложения, поэтому после установки приложения оно готово для подключения к источнику данных.

Конечно, в зависимости от ваших требований есть два других типа драйверов, но это другой разговор.

person Vincent Ramdhanie    schedule 24.03.2009
comment
Кроме того, Oracle заявила, что мост JDBC-ODBC будет удален из JDK 8 (ссылка: здесь). - person Gord Thompson; 28.11.2013

Как правило, лучший способ работы с РСУБД на Java — это использование драйвера JDBC, предназначенного для прямого подключения к базе данных. Использование моста JDBC-ODBC имеет тенденцию быть медленным.

Если вы пытаетесь выполнять базовые операции чтения/записи с базой данных Access, я также рекомендую взглянуть на Jackcessбиблиотека.

person Rob Di Marco    schedule 24.03.2009

  1. Перейдите в панель управления --> Администрирование --> Администратор источника данных ODBC.
  2. Добавить базу данных --> Выберите "Драйвер Microsoft (*.mdb, *.accdb)"
  3. Двойной щелчок по новой базе данных --> В разделе «База данных» нажмите «Выбрать» --> Выберите файл *.accdb, который вы создали как базу данных MS Access.
  4. Скажите «ОК» и перейдите к своему java-коду.
  5. Использование: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:имя файла");

Это обязательно решит все ваши проблемы.

person user3043367    schedule 27.11.2013