java - 如何修复:嵌入式 H2 数据库“NonTransientError:无法读取该位置的页面”错误?
问题描述
我正在创建一个带有嵌入式 H2 数据库的 JavaFX 程序,该数据库将用于处理用户登录名和密码。使用 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”中检索数据。代码未编译并出现上述错误。
编辑:如果我使用1.4.199
H2 版本而不是1.4.200
,问题就消失了。我在这里发现了一个几乎相同的问题:https ://github.com/h2database/h2database/issues/2078 。此链接与我的具有相同的堆栈跟踪。我还没有解决版本问题1.4.200
解决方案
https://github.com/h2database/h2database/issues/2078 您应该使用相同的驱动程序,因此在使用 1.4.196(由 IDEA 使用)进行修改后,无法使用 1.4.200(当前 spring 数据版本)读取它。所以我的崩溃场景是在 IDEA 中使用驱动程序 1.4.196 打开数据库,而 Spring 应用程序代码使用 1.4.200。所以它不会重新开始。您可以在 pom.xml 中为您的应用声明 1.4.196 版本,但看起来您将受限于此版本,我不知道如何完全修复您的数据库。
推荐阅读
- php - PHP - 将文本转换为 Unicode
- android - 谷歌地图点击兴趣点在Android和IOS上返回不同的placeId
- excel - VBA - 使用插入的行应用自动填充(基于输入框)并将其应用到其他工作表
- django - 每次我输入提交时,Is_valid 似乎都不是真的
- python-3.x - AssertionError:某些对象具有未恢复的属性
- vue.js - Vue div 文本没有动态更新
- c++ - 在 s-function 中将字符串数组作为参数传递
- google-pagespeed - pagespeed FCP 值:为什么不采用实验室值?
- slack - 使用 Slack App 统计所有用户的消息
- javascript - 使用 jquery 切换图像