H2 数据库表上的 SQL 查询引发 ArrayIndexOutOfBoundsException
Posted
技术标签:
【中文标题】H2 数据库表上的 SQL 查询引发 ArrayIndexOutOfBoundsException【英文标题】:SQL query on H2 database table throws ArrayIndexOutOfBoundsException 【发布时间】:2014-10-15 05:29:47 【问题描述】:我有一个 H2 数据库,其中一些查询可以工作,而另一些则抛出 ArrayIndexOutOfBoundsException
。
例如:
SELECT COLUMN_1 FROM MY_TABLE; // works fine
SELECT COUNT(COLUMN_1) FROM MY_TABLE; // gives following error message:
[Error Code: 50000, SQL State: HY000]
General error: "java.lang.ArrayIndexOutOfBoundsException";
SQL statement: SELECT COUNT(COLUMN_1) FROM MY_TABLE [50000-167]
这个错误信息的原因是什么?
【问题讨论】:
你能发布完整的堆栈跟踪吗?请注意根据错误码,这是H2版本1.3.167,比较老了。 感谢您指出旧的 H2 版本。我不知道它变得如此过时。尝试再次获取堆栈跟踪使我走上了正确的道路(请参阅下面的答案),所以谢谢:-) 【参考方案1】:错误消息的原因是数据库损坏。
我使用 H2 恢复工具解决了这个问题。步骤如下:
创建恢复脚本
C:\PATH_TO_CORRUPT_DB>java -cp C:\PATH_TO_MY_H2\h2.jar org.h2.tools.Recover
删除旧的 db 文件(当然,要先制作备份副本 ;-))
重新创建数据库
C:\PATH_TO_CORRUPT_DB>java -cp C:\PATH_TO_MY_H2\h2.jar org.h2.tools.RunScript -url jdbc:h2:PATH_TO_CORRUPT_DB\NAME_OF_DB -script NAME_OF_SCRIPT_FROM_STEP_ONE.sql
在这里你可以找到more detailed usage description of the H2 Recovery Tool
【讨论】:
以上是关于H2 数据库表上的 SQL 查询引发 ArrayIndexOutOfBoundsException的主要内容,如果未能解决你的问题,请参考以下文章