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

Mae*_*ros 8 java postgresql null constraints jdbc

我在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),
);
Run Code Online (Sandbox Code Playgroud)

然后,使用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();
Run Code Online (Sandbox Code Playgroud)

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

org.postgresql.util.PSQLException: ERROR: null value in column "user_id" violates not-null constraint
Run Code Online (Sandbox Code Playgroud)

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

任何想法将不胜感激.

谢谢.

Erw*_*ter 8

正如@mu评论的那样,错误消息与您的其他问题相矛盾.

唯一合理的解释是,事实上,你正在写一个不同的表格

尝试:

INSERT INTO users (user_id, name, username, password) VALUES
(1234,'foo', 'foo', 'foo')";
Run Code Online (Sandbox Code Playgroud)

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

  • IP,端口,数据库名称?
  • 数据库中的模式相同?检查你的search_path设置.
  • 你不是偶然双引用表名"USERS"?双引号标识符不会转换为小写.有关详细信息,请阅读标识符和关键字一章.

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