小编典典

H2数据库表上的SQL查询引发ArrayIndexOutOfBoundsException

sql

我有一个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]

产生此错误消息的原因是什么?


阅读 195

收藏
2021-05-23

共1个答案

小编典典

该错误信息的原因是 数据库损坏。

我通过使用H2恢复工具解决了该问题。 步骤如下:

  1. 创建恢复脚本

    C:\PATH_TO_CORRUPT_DB>java -cp C:\PATH_TO_MY_H2\h2.jar org.h2.tools.Recover
    
  2. 删除旧的db文件(当然,首先要制作备份副本;-)

  3. 重新创建数据库

    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恢复工具更详细的使用说明

2021-05-23