org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_NOTNULL] A NOT NULL constraint failed (NOT NULL constraint failed: stock.id)
我的 SQLite 数据库中有三列,分别是 id、pname、mrp,但我只想将数据插入两列, 然后我做了这个
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
Class.forName("org.sqlite.JDBC");
Connection con = DriverManager.getConnection("jdbc:sqlite:qmb.db");
String query="INSERT INTO stock(pname,mrp) VALUES('"+jTextField2.getText()+"','"+jTextField5.getText()+"');";
executeSQlQuery(query, "Inserted"); // TODO add your handling code here:
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(UpdateStock.class.getName()).log(Level.SEVERE, null, ex);
}
}
我只是希望能够通过单击按钮将行插入数据库
最佳答案
在 SQLite 中创建表时,要用作主键的列(在本例中为 id
)必须是使用完全关键字 INTEGER PRIMARY KEY
创建的。以便使其行为成为 SQLite 的轻量级自动增量版本。这允许您在不提供列值的情况下添加行(SQLite 将为您填充它)。 INT PRIMARY KEY
不会这样做,也不会UNSIGNED INTEGER PRIMARY KEY
,也不会出现任何其他变化。尝试使用 INTEGER PRIMARY KEY
重新创建表作为 id
的类型(您还可以添加 NOT NULL
约束)。
您可以选择添加关键字 AUTOINCREMENT
到 id
的定义(即使用 INTEGER PRIMARY KEY AUTOINCREMENT
)。这将迫使 SQLite 在添加新行时不重用以前删除的行的 ID,但这会更慢并且占用更多内存和磁盘空间。
下面是如何在 SQLite 中创建表的示例,这样您就不必填写 id
当您插入一行时:
CREATE TABLE stock(id INTEGER PRIMARY KEY, pname TEXT, mrp TEXT);
附注- 由于 INTEGER PRIMARY KEY
的特殊功能通过从 id
创建别名来工作至ROWID
,您不应该同时使用 WITHOUT ROWID
创建表时的关键字。
P.P.S。 - 您没有关闭在上面的代码中创建的 SQL 连接(还有其他主要问题我忽略了,但这是最重要的)。您需要在 finally
中执行此操作子句以确保即使在发生异常时连接也会关闭:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Connection con = null;
try {
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:qmb.db");
String query="INSERT INTO stock(pname,mrp) VALUES('"+jTextField2.getText()+"','"+jTextField5.getText()+"');";
executeSQlQuery(query, "Inserted"); // TODO add your handling code here:
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(UpdateStock.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException ex) {
Logger.getLogger(UpdateStock.class.getName()).log(Level.WARNING, "can't close SQL connection!" , ex);
}
}
}
}
关于java - 非空约束失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57801114/