10

我在 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()产生以下异常:

ERROR: null value in column "user_id" violates not-null constraint

奇怪的是,如果我使用 psql 执行相同的插入语句,它就会成功执行。为什么?

4

3 回答 3

10

正如@mu 评论的那样,错误消息与您的其余问题相矛盾。
剩下的唯一合理解释是,事实上,您正在写信给另一张桌子

尝试:

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

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

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

于 2012-11-14T10:22:43.043 回答
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)并且可能导致您的错误。只需将其删除。

于 2012-11-14T03:12:47.967 回答
0

解决。

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

一旦删除一个并得到修复

于 2019-11-25T11:26:14.847 回答