java-JDBC SQLite不强制执行唯一主键约束
作者:互联网
谁能向我建议为什么我的SQLite JDBC数据库不执行唯一主键约束?
创建表的方法是:
public static void TableCars()
{
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:WalkerTechCars.db");
System.out.println("Opened database successfully");
stmt = c.createStatement();
String sql = "CREATE TABLE IF NOT EXISTS CARS3 " +
"(REGISTRATION TEXT PRIMRY KEY NOT NULL, " +
" PHONE TEXT NOT NULL," +
" MAKE TEXT NOT NULL, " +
" MODEL TEXT, " +
" COLOUR TEXT)";
stmt.executeUpdate(sql);
stmt.close();
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
System.out.println("Cars3 created successfully");
}
插入方法是:
public static void InsertCars(String table, String phone, String registration, String make, String model, String colour)
{
Connection c = null;
PreparedStatement pstmt = null;
try {
Class.forName("org.sqlite.JDBC");
c = DriverManager.getConnection("jdbc:sqlite:WalkerTechCars.db");
c.setAutoCommit(false);
System.out.println("Opened database successfully");
String query="INSERT INTO "+table+" (PHONE,REGISTRATION,MAKE, MODEL,COLOUR) VALUES (?,?,?,?,?)";
pstmt = c.prepareStatement(query);
pstmt = c.prepareStatement
("insert into CARS3 values(?,?,?,?,?)");
pstmt.setString(1,registration);
pstmt.setString(2,phone);
pstmt.setString(3, make);
pstmt.setString(4, model);
pstmt.setString(5, colour);
pstmt.executeUpdate();
pstmt.close();
c.commit();
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
System.exit(0);
}
System.out.println("Car Records created successfully");
}
不应允许但可以重复执行的代码行是:
DbHandler.InsertCars("Cars3", "1","BN51 MZY", "Mini", "C220", "BLACK");
解决方法:
您的创建SQL会显示PRIMRY KEY而不是PRIMARY KEY
.因此,您的表最初是在没有PRIMARY KEY约束的情况下创建的,并且由于您添加了“ IF NOT EXISTS”条件,因此新创建的内容只有在先前删除该表后才会生效.
您可以在列约束图中找到创建没有PRIMARY KEY约束的表的原因:
约束定义错误(PRMARY不是PRIMARY)(用红色表示)使列约束子语法不被触发.
标签:sqlite,eclipse,primary-key,jdbc,java 来源: https://codeday.me/bug/20191029/1957329.html