我有一个H2数据库,可以在其中运行某些查询,而另一些则抛出ArrayIndexOutOfBoundsException。
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恢复工具解决了该问题。 步骤如下:
创建恢复脚本
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
在这里,您可以找到有关H2恢复工具的更详细的使用说明