H2数据库表上的SQL查询抛出ArrayIndexOutOfBoundsException

Kaa*_*zia 6 sql h2 large-data dbvisualizer indexoutofboundsexception

我有一个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]
Run Code Online (Sandbox Code Playgroud)

这个电子邮件的原因是什么?

Kaa*_*zia 5

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

我使用H2 Recovery Tool解决了这个问题.步骤如下:

  1. 创建恢复脚本

    C:\PATH_TO_CORRUPT_DB>java -cp C:\PATH_TO_MY_H2\h2.jar org.h2.tools.Recover
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)


在这里,您可以找到H2 Recovery Tool更详细的用法说明