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
Vous avez trop de points d'interrogation dans votre instruction sql (en spécifiant 3 colonnes mais 5 lier des paramètres). Ajouter
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
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
Vous devez vous connecter pour publier un commentaire.
@Mu a commenté, le message d'erreur contradiction avec le reste de votre question.
La seule explication raisonnable à gauche, c'est que vous êtes, en fait, l'écriture d'un autre table
Essayer:
Et vérifier votre table. A l'INSERTION d'arriver à la table que vous attendiez? Si non, vérifiez vos paramètres:
search_path
réglage.Trouver l'autre instance de table
users
et corriger les éventuels dommages que vous pourriez avoir fait. 🙂OriginalL'auteur Erwin Brandstetter
Remarque seulement trois points d'interrogation et maintenant les champs de la ligne correctement.
Aussi, ne vous inquiétez pas au sujet de la
NOT NULL
contrainte. Il gère lui-même (comment pourrait-il jamais êtreNULL
, c'estSERIAL
) et pourrait être la cause de votre erreur. Suffit de le retirer.J'ai ajouté quelque chose de mal, essayez que.
OriginalL'auteur durron597