MS Access не будет обновлять таблицу после выполнения запроса INSERT INTO через ucanaccess в Java - PullRequest
0 голосов
/ 13 июня 2019

У меня есть Java-программа для назначения отдыхающим гостиничных номеров. Всякий раз, когда я пытаюсь вставить запись гостиничного номера в таблицу доступа ms, используя запрос INSERT INTO через ucanaccess в java, соответствующая таблица не будет обновляться, если я не закрою и снова не открою доступ, или когда я нажму «Сжать и восстановить». команда. Есть ли способ исправить это и сделать доступ немедленно обновить таблицу с новой записью, не предпринимая этих шагов? Вот часть моего исходного кода Java:

public boolean addHotelRoom(Integer roomNum, Integer periodNum,
        boolean hasDisabledDevices)
{

    try
    {
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        try (Connection conn = DriverManager.getConnection(Consts.CONN_STR);
                CallableStatement stmt = conn.prepareCall(Consts.SQL_INS_HOTEL_ROOM))
        {

            stmt.setInt(1, roomNum);
            stmt.setInt(2, periodNum);
            stmt.setBoolean(3, hasDisabledDevices);
            stmt.executeUpdate();
            return true;

        } 
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    } catch (ClassNotFoundException e)
    {
        e.printStackTrace();
    }
    return false;

}

1 Ответ

2 голосов
/ 13 июня 2019

UCanAccess не поддерживает общий режим в базах данных Access.

Это объяснено здесь в блоге UCanAccess.

Это означает, что ваш текущий вариант использования при наличии Accessоткрыть, пока приложение UCanAccess пишет в него, не поддерживается.Если поддержка не будет добавлена ​​в будущем, она не будет работать.В настоящее время нет обходного пути.

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

Обратите внимание, что UCanAccess записывает в базу данных, пока она открыта в Accessможет вызвать конфликты / повреждение, если Access выполняет запись тоже.Я настоятельно рекомендую избегать этого.

...