【发布时间】:2020-11-07 11:47:30
【问题描述】:
几年前,我编写了一个应用程序来将数据捕获到 H2 数据文件中,以便于传输和归档。该应用程序是使用 H2 1.4.192 编写的。
最近,我一直在重新审视与该应用程序相关的一些加载代码,我发现我在 H2 1.4.200 中所做的一些事情有一些实质性的收获。
我希望能够加载我之前保存到其他数据库的数据。但是我有一些表使用了现在无效的精度比例规范。这是一个例子:
创建缓存表 PUBLIC.MY_TABLE(MY_COLUMN DATETIME(23,3) SELECTIVITY 5)
使用 1.4.192 创建的包含此类表的 H2 数据库不会在 1.4.200 上加载, 他们将收到以下错误:
Scale($"23") 不能大于precision({1}); SQL 语句: 创建缓存表 PUBLIC.MY_TABLE(MY_COLUMN DATETIME(23,3) SELECTIVITY 5) [90051-200] 90051/90051(帮助)
我的问题是如何纠正无效的表架构?我的应用程序利用到 H2 数据库的连接,然后将它包含的数据加载到另一个数据库中。理想情况下,我希望我的应用程序能够检测到这种情况并自动修复它,以便应用程序可以简单地利用旧数据文件。但在 H2 1.4.200 中,我在连接时立即收到错误。
是否有秘密/特殊模式允许我将 1.4.200 连接到数据库以修复其架构?我希望???
除此之外,似乎我唯一的选择是为不同版本的 H2 提供单独的类加载器,并在一个类加载器中进行补救操作,而加载操作在另一个类加载器中进行。要么启动另一个 JVM 实例来执行补救操作。
我想在做大量工作之前检查选项。
此问题与this 报告的问题类似,但没有具体说明他是如何解决的。
【问题讨论】:
标签: h2