PSQLException: ERREUR: la valeur null dans la colonne viole non-nulle contrainte

Je suis en utilisant PostgreSQL 8.4.13 sur x86_64-pc-linux-gnu Debian 4.4.5-8, 64-bit.

J'ai créé le tableau suivant:

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

Puis, à l'aide d'une application Java, j'exécute le code suivant:

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();

Le problème ici est que l'executeUpdate() génère l'exception suivante:

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

La chose étrange est que si j'exécute la même instruction insert à l'aide de psql, il s'exécute avec succès.

Toutes les idées seront très appréciés.

Merci.

Pourquoi vous avez 5 points d'interrogation et seulement 3 setString? Aussi, ils semblent être hors de vue...
Vous avez trop de points d'interrogation dans votre instruction sql (en spécifiant 3 colonnes mais 5 lier des paramètres). Ajouter id comme une insertion de colonne et de supprimer un point d'interrogation ou de supprimer les points d'interrogation.
Merci pour vos réponses! La question supplémentaire, les marques et la sortie de la commande agissait d'un copier-coller de l'erreur due à une modification du code de présenter une version simple. J'ai corrigé.
L'erreur n'a pas de sens à moins que quelqu'un est la réécriture de votre SQL derrière votre dos. Qu'advient-il si vous utilisez (user_id, name, username, password) VALUES (DEFAULT, ?, ?, ?)?

OriginalL'auteur Maestros | 2012-11-14