Как исправить ошибку: ошибка встроенной базы данных H2 «NonTransientError: невозможно прочитать страницу в позиции»? - PullRequest
3 голосов
/ 18 октября 2019

Я создаю программу JavaFX со встроенной базой данных H2, которая будет использоваться для обработки пользовательских логинов и паролей. Используя Intellij Ultimate, у меня есть база данных, которую я могу запустить с панели инструментов. Кроме того, я почти уверен, что у меня есть правильный драйвер JDBC и URL. База данных работает нормально из консоли базы данных Intellij. Ошибка возникает, когда я пытаюсь получить доступ к базе данных с помощью кода Java. Я использую класс базы данных для обработки моего соединения с базой данных.

Я получаю JdbcSQLNonTransientException, Общая ошибка:

Исключение из-за недопустимого состояния: невозможно прочитать страницу в позиции

Причина: java.lang.IllegalStateException: Неподдерживаемый тип 17.

Строка кода, которая отображается в моем компиляторе, вызывая ошибку: Connection conn = DriverManager.getConnection(DB_URL, "sa", "");

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

Упрощенный класс DatabaseManager, вызывающий проблему:

public class DatabaseManager {
    static final String JDBC_DRIVER = "org.h2.Driver";
    static final String DB_URL = "jdbc:h2:D:/trant/Documents/Java Practice/Order A Car2/res/userDatabase";

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("org.h2.Driver");
        Connection conn = DriverManager.getConnection(DB_URL, "sa", "");
        Statement st = conn.createStatement();
        st.executeUpdate("SELECT * FROM JOBS");
        conn.close();
    }
}

Я ожидаю подключения к базе данных H2 и извлечения данных из таблицы "JOBS". Код не компилируется с вышеуказанными ошибками.

edit: Если я использую версию 1.4.199 H2 вместо 1.4.200, проблема исчезнет. Я нашел почти идентичную проблему здесь: https://github.com/h2database/h2database/issues/2078. Эта ссылка имеет ту же трассировку стека, что и моя. Мне еще предстоит решить проблему с версией 1.4.200

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

https://github.com/h2database/h2database/issues/2078 вы должны использовать тот же драйвер, поэтому чтение его с 1.4.200 (текущая версия данных весны) невозможно после модификации с 1.4.196 (используется IDEA). Таким образом, мой сценарий сбоя был открыт в БД IDEA с драйвером 1.4.196, в то время как весенний код приложения использовал 1.4.200. Так что это не начнется снова. Вы можете объявить версию 1.4.196 в pom.xml для своего приложения, но похоже, что вы будете ограничены этой версией, и я не знаю, как вы можете полностью восстановить вашу базу данных.

0 голосов
/ 18 октября 2019

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

И сообщение, которое вы видите, не является ошибкой компиляции.

Обычно такое сообщение означает, что вашеБаза данных повреждена. Если вам не нужны никакие данные, вы можете просто удалить все его файлы и заново создать их с нуля.

Если вы можете открыть базу данных из какого-либо инструмента, но не можете открыть ее из своего приложенияпроверьте версии H2, которые используются в обоих местах, и выровняйте их. Вы можете экспортировать базу данных в версии, которая работает в сценарий SQL, с помощью команды SCRIPT TO 'filename.sql' и использовать этот сценарий для заполнения данных в новой базе данных, чтобы убедиться, что они не повреждены (в выбранной вами версии).

...