我有一个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]
此错误消息的原因是什么?
答案 0 :(得分:5)
错误消息的原因是损坏的数据库。
我使用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