Java HSQLDB-完整性约束冲突:唯一约束或索引冲突;块\u PK表:块
我是HSQLDB的新手,刚遇到这个错误,我在互联网上找不到任何解决方案,好像我遗漏了什么^^ 我的应用程序目前除了创建两个表(如果它们还不存在的话)之外没有做任何其他事情 这是我处理HSQLDB的代码: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.");
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>