我在 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 执行相同的插入语句,它就会成功执行。为什么?