6

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

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

4

1 回答 1

5

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

我通过使用 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 Recovery Tool 使用说明

于 2014-08-22T12:48:00.867 回答