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

Я создаю настольное приложение в JAVA (плагин RCP) и использую MS Access в качестве базы данных для своего приложения.

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

Есть ли способ поделиться файлом базы данных MS Access между разными компьютерами, используя соединение JDBC?

3 ответа

Решение

Нет. Это похоже на то, как если бы вы подарили свой автомобиль нескольким людям, и все они хотят управлять им одновременно: это не сработает по многим причинам.

обходные:

  1. Используйте реальную базу данных, такую ​​как MySQL или H2.

  2. Создайте сервер Java, который общается с базой данных Access. Пусть все остальные программы общаются с этим сервером.

Примечание: вы не можете использовать JDBC в "других программах", когда используете подход № 2. Вам придется написать свой собственный протокол.

Я считаю, что есть некоторые настройки, которые вы можете сделать для многопользовательской опции в MS Access. Пожалуйста, выполните следующие шаги. Откройте MS Access (2016), перейдите к "Файл"> "Параметры"> "Настройки клиента"> перейдите к "Дополнительно":-

Режим открытия по умолчанию: Shared; Блокировка записи по умолчанию: без блокировок;

Если ваше приложение на самом деле использует мост JDBC-ODBC (как это было предложено тегом jdbc-odbc в вашем вопросе) и драйвер ODBC для Microsoft Access, тогда да, небольшое число одновременно работающих пользователей должно иметь возможность использовать ваше приложение Java для работы в базе данных общего доступа.

Наиболее распространенная причина описанного в вашем вопросе поведения - недостаточные разрешения для папки, в которой находится файл базы данных Access (.accdb или.mdb). Access использует "файл блокировки" (.laccdb или.ldb) для управления несколькими одновременными пользователями, поэтому у всех пользователей должны быть права "изменять" для папки, чтобы они могли создавать и / или обновлять файл блокировки.

Например, если ваша общая база данных Access находится на общем сервере, который сопоставлен с диском Z: для всех пользователей, а ваш Java-код выглядит примерно так...

// (Note: Only for Java 7 or earlier.)
String url = "jdbc:odbc:" +
        "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
        "DBQ=Z:/test/myTest.mdb;";
try (Connection conn = DriverManager.getConnection(url)) {
    // do useful stuff here
} catch (Exception e) {
    e.printStackTrace(System.err);
}

... тогда вам нужно убедиться, что у всех пользователей есть разрешения на "изменение" в папке "Z:\test".

Для более подробного объяснения см. Мой другой ответ здесь.

Другие вопросы по тегам