PSQLException:错误:列中的空值违反非空约束

时间:2012-11-14 03:08:35

标签: java postgresql jdbc null constraints

我在Debian 4.4.5-8,64位的x86_64-pc-linux-gnu上使用PostgreSQL 8.4.13。

我创建了下表:

CREATE TABLE users (
user_id             serial PRIMARY KEY NOT NULL,
name                varchar(200),
username            varchar(150),
password            varchar(150),
);

然后,使用Java应用程序,执行以下代码:

String insertTableSQL = "INSERT INTO USERS"
                + "(name, username, password) VALUES"
                + "(?,?,?)";
PreparedStatement preparedStatement = DBCon.prepareStatement(insertTableSQL);
preparedStatement.setString(1, userInfo.get("name"));           
preparedStatement.setString(2, userInfo.get("username"));
preparedStatement.setString(3, userInfo.get("password")));

preparedStatement.executeUpdate();

这里的问题是executeUpdate()生成以下异常:

org.postgresql.util.PSQLException: ERROR: null value in column "user_id" violates not-null constraint

奇怪的是,如果我使用psql执行相同的insert语句,它会成功执行。

非常感谢任何想法。

谢谢。

3 个答案:

答案 0 :(得分:8)

正如@mu评论的那样,错误信息与你提出的其他问题相矛盾。

唯一合理的解释是,您实际上是在写一个不同的表

尝试:

INSERT INTO users (user_id, name, username, password) VALUES
(1234,'foo', 'foo', 'foo')";

检查你的桌子。 INSERT是否到达了您预期的位置?如果没有,请检查您的设置:

  • IP,端口,数据库名称?
  • DB中的相同架构?检查您的search_path设置。
  • 你不是偶然双引用表名“USERS”?双引号标识符不会转换为小写。有关详细信息,请阅读Identifiers and Key Words一章。

找到表格users的另一个实例并修复您可能造成的潜在损害。 :)

答案 1 :(得分:0)

String insertTableSQL = "INSERT INTO USERS"
            + "(name, username, password) VALUES"
            + "(?,?,?)";
PreparedStatement preparedStatement = DBCon.prepareStatement(insertTableSQL);
preparedStatement.setString(1, userInfo.get("name"));           
preparedStatement.setString(2, userInfo.get("username"));
preparedStatement.setString(3, userInfo.get("password")));

preparedStatement.executeUpdate();

只注意三个问号,现在这些字段排列正确。

也不要担心NOT NULL约束。它将处理自己(它怎么可能是NULL,它是SERIAL)并且可能导致你的错误。只需删除它。

答案 2 :(得分:0)

已解决。

我的问题是我在数据库中有2列,而在实体中有一个映射的列。这是由于属性文件中的sql更新

一次删除并修复