Java HSQLDB-完整性约束冲突:唯一约束或索引冲突;块\u PK表:块

Java HSQLDB-完整性约束冲突:唯一约束或索引冲突;块\u PK表:块,java,hsqldb,Java,Hsqldb,我是HSQLDB的新手,刚遇到这个错误,我在互联网上找不到任何解决方案,好像我遗漏了什么^^ 我的应用程序目前除了创建两个表(如果它们还不存在的话)之外没有做任何其他事情 这是我处理HSQLDB的代码: try { Class.forName("org.hsqldb.jdbc.JDBCDriver" ); } catch (Exception e) { System.err.println("ERROR: failed to load HSQLDB JDBC driver.");

我是HSQLDB的新手,刚遇到这个错误,我在互联网上找不到任何解决方案,好像我遗漏了什么^^

我的应用程序目前除了创建两个表(如果它们还不存在的话)之外没有做任何其他事情

这是我处理HSQLDB的代码:

try {
    Class.forName("org.hsqldb.jdbc.JDBCDriver" );
} catch (Exception e) {
    System.err.println("ERROR: failed to load HSQLDB JDBC driver.");
    e.printStackTrace();
    return;
}

try {
    connection = DriverManager.getConnection("jdbc:hsqldb:file:"+mi.getDataFolder().getPath()+"\\data\\storage;hsqldb.lock_file=false", "SA", "");
    connection.prepareStatement(
            "CREATE TABLE IF NOT EXISTS Punishments (" +
            "id INTEGER IDENTITY PRIMARY KEY," +
            "name VARCHAR(16)," +
            "uuid VARCHAR(35)," +
            "reason VARCHAR(100)," +
            "operator VARCHAR(16)," +
            "punishmentType VARCHAR(16)," +
            "start BIGINT," +
            "end BIGINT," +
            "calculation VARCHAR(50))"
    ).execute();
    connection.prepareStatement(
            "CREATE TABLE IF NOT EXISTS PunishmentHistory (" +
            "id INTEGER IDENTITY PRIMARY KEY," +
            "name VARCHAR(16)," +
            "uuid VARCHAR(35)," +
            "reason VARCHAR(100)," +
            "operator VARCHAR(16)," +
            "punishmentType VARCHAR(16)," +
            "start BIGINT," +
            "end BIGINT," +
            "calculation VARCHAR(50))"
    ).execute();
} catch (SQLException e) {
    e.printStackTrace();
}
在我运行代码的前两次左右,它运行得很好,但在某些时候,我不断遇到以下错误:

    [22:22:21 FATAL]: statement error processing log - open continuedplugins\AdvancedBan\data\storage.log line: 2
    org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation; BLOCKS_PK table: BLOCKS
            at org.hsqldb.error.Error.error(Unknown Source) ~[AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.Constraint.getException(Unknown Source) ~[AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.index.IndexAVLMemory.insert(Unknown Source) ~[AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.persist.RowStoreAVL.indexRow(Unknown Source) ~[AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.TransactionManager2PL.addInsertAction(Unknown Source) ~[AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.Session.addInsertAction(Unknown Source) ~[AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.Table.insertNoCheckFromLog(Unknown Source) ~[AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.persist.ScriptRunner.runScript(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.persist.ScriptRunner.runScript(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.persist.Log.processLog(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.persist.Log.open(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.persist.Logger.open(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.Database.reopen(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.Database.open(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.DatabaseManager.getDatabase(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.DatabaseManager.newSession(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
            at java.sql.DriverManager.getConnection(Unknown Source) [?:1.8.0_111]
            at java.sql.DriverManager.getConnection(Unknown Source) [?:1.8.0_111]
            at me.leoko.advancedban.manager.DatabaseManager.setup(DatabaseManager.java:69) [AdvancedBan-2.0.6-SNAPSHOT.jar:?]
[...]
我使用的是HSQLDB的2.4.0版,但也尝试了一些旧版本

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.4.0</version>
    <scope>compile</scope>
</dependency>

org.hsqldb
hsqldb
2.4.0
编译
感谢您提前提供的任何建议。

我最后不得不在关闭应用程序时调用“SHUTDOWN”SQL命令,并不时调用“CHECKPOINT”SQL命令


感谢您帮助我解决这个问题。

您可能正在使用旧版本的HSQLDB。试试最新版本。@fredt我使用的是HSQLDB的2.4.0,它应该是最新版本,还编辑了我的问题。无论如何,感谢您的帮助:)在其他语句之后添加connection.prepareStatement(“CHECKPOINT”).execute(),它应该可以解决这个问题@fredt谢谢,这解决了我的一部分问题,但随后出现了一个稍微不同的异常。我对“CHECKPOINT”查询做了更多的研究,因为我从来没有听说过它,并且发现我应该在关闭应用程序时调用“SHUTDOWN”查询。这样就解决了所有的例外。非常感谢你的邀请help@Leoko嗨,我正在做JUnit测试,得到了相同的唯一性错误。能不能请你帮我查一下密码?以及需要粘贴代码的位置。
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.4.0</version>
    <scope>compile</scope>
</dependency>