我在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语句,它会成功执行。
非常感谢任何想法。
谢谢。
答案 0 :(得分:8)
正如@mu评论的那样,错误信息与你提出的其他问题相矛盾。
唯一合理的解释是,您实际上是在写一个不同的表
尝试:
INSERT INTO users (user_id, name, username, password) VALUES
(1234,'foo', 'foo', 'foo')";
检查你的桌子。 INSERT是否到达了您预期的位置?如果没有,请检查您的设置:
search_path
设置。找到表格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更新
一次删除并修复