gpt4 book ai didi

java - 非空约束失败

转载 作者:行者123 更新时间:2023-12-01 06:01:28 24 4
gpt4 key购买 nike

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 约束)。

您可以选择添加关键字 AUTOINCREMENTid 的定义(即使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com