java.sql.SQLException : column id is not unique

标签 java sqlite sqlexception

我有一个用 Java 编写的程序,它解析一组文件并使用 sqlite 将有关它们的信息放入数据库中。该代码似乎工作正常一段时间,直到有一天我收到此异常:

Exception in thread "main" java.sql.SQLException: column id is not unique
at org.sqlite.DB.throwex(DB.java:370)
at org.sqlite.DB.executeBatch(DB.java:302)
at org.sqlite.PrepStmt.executeBatch(PrepStmt.java:93)
at DatabaseTest.main(DatabaseTest.java:43)

事实证明,其中两个文件在我的代码中以某种方式相互干扰。我构建了一个较小的程序,但仍然出现相同的问题。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class DatabaseTest {

public static void main(String[] args) throws SQLException {
    System.out.println(new org.sqlite.JDBC().toString());
    Connection conn = DriverManager.getConnection("jdbc:sqlite:my_file.sqlite");
    Statement stat = conn.createStatement();
    try {
        stat.executeUpdate("drop table if exists my_table;");
        stat.executeUpdate("create table my_table (id STRING UNIQUE, content STRING);");

        PreparedStatement prep = conn.prepareStatement("insert into my_table values (?, ?);");

        prep.setString(1, "0325E498"); // I keep this value same for all tests
        prep.setString(2, "test1");
        prep.addBatch();

        //prep.setString(1, "0336E810"); // Gives error
        //prep.setString(1, "0336E8100"); // Gives error
        //prep.setString(1, "0336E8100000"); // Gives error
        //prep.setString(1, "0336E8111111"); // Gives error
        //prep.setString(1, "1336E811"); // Gives error
        //prep.setString(1, "9336E811"); // Gives error
        //prep.setString(1, "A336E811"); // OK!
        //prep.setString(1, "111111111E811"); // Gives error
        prep.setString(1, "111111111E311"); // Gives error
        //prep.setString(1, "111111111E211"); // OK!
        prep.setString(2, "test2");
        prep.addBatch();

        conn.setAutoCommit(false);
        prep.executeBatch();  // Exception thrown here
        conn.setAutoCommit(true);
    } finally {
        stat.close();
        conn.close();
    }
}

我当前的maven依赖信息。

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.7.2</version>
</dependency>

那么我是不是做错了什么?为什么这对大多数字符串有效,但不适用于全部?唯一性是否以非直接的方式计算?

最佳答案

由于您对 id 列应用了 UNIQUE 约束,因此如果您尝试在 id 列中插入任何现有值,将会出错

关于java.sql.SQLException : column id is not unique,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15878441/

相关文章:

java - Android 中的后退按钮就像 Gmail 应用程序中的后退按钮吗?

java - 连接空闲后出现 SQLException

java - 使用 MySql DB 获取 java 中准备好的语句的元数据

java - 如何打印httprequest请求的内容?

java - 如何在seedstack中使用Group By?

android - 在Ormlite Android中更新数据库的安全方法

linux - 备用 SQlite 备份解决方案

java - 区分 JDBC 驱动程序异常和数据库异常

java - 在 Web 应用程序中卡住

android - 如何在 Firebase 中插入两个表的数据?