PSQLException: FEHLER: null-Wert in Spalte " verletzt not-null-constraint
Ich bin mit PostgreSQL 8.4.13 auf x86_64-pc-linux-gnu auf Debian 4.4.5-8, 64-bit.
Ich habe die folgende Tabelle:
CREATE TABLE users (
user_id serial PRIMARY KEY NOT NULL,
name varchar(200),
username varchar(150),
password varchar(150),
);
Dann mit einer Java-Anwendung, die ich ausführen den folgenden code:
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();
Das Problem hier ist, dass die executeUpdate() generiert die folgende Ausnahme:
org.postgresql.util.PSQLException: ERROR: null value in column "user_id" violates not-null constraint
Komisch ist, wenn ich führen Sie die gleiche insert-Anweisung mithilfe von psql, erfolgreich ausgeführt wird.
Irgendwelche Ideen würde sehr geschätzt.
Danke.
- Warum muss man 5 Fragezeichen und nur 3
setString
? Auch Sie scheint zu sein, out of order... - Sie haben zu viele Fragezeichen in der sql-Anweisung (Angabe von 3 Spalten aber 5 bind-Parameter). Entweder fügen Sie
id
als eine Spalte einfügen und entfernen, ein Fragezeichen oder entfernen Sie die zusätzlichen Fragezeichen. - Danke für Eure Antworten! Die zusätzlichen Fragezeichen-und der out-of-order-Problem war ein copy-paste Fehler aufgrund einer änderung des Codes zu präsentieren, eine einfache version davon. Ich korrigierte es.
- Der Fehler macht keinen Sinn, es sei denn, jemand umschreiben Ihre SQL-hinter Ihrem Rücken. Was passiert, wenn Sie
(user_id, name, username, password) VALUES (DEFAULT, ?, ?, ?)
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @mu kommentiert, die Fehlermeldung widerspricht dem rest Ihrer Frage.
Ist die einzige vernünftige Erklärung ist, dass Sie sind, in der Tat, das schreiben in ein anderen Tabelle
Versuchen:
Und überprüfen Sie Ihre Tabelle. Hab den STECKEN kommen in die Tabelle, die Sie erwarten? Wenn nicht, überprüfen Sie Ihre Einstellungen:
search_path
Einstellung.Finden, die andere Instanz der Tabelle
users
und beheben Sie potenzielle Schäden, die Sie getan haben. 🙂Beachten Sie, dass nur die drei Fragezeichen und jetzt die Felder line-up richtig.
Sich auch keine Gedanken über die
NOT NULL
Einschränkung. Es handle sich (wie könnte es jemals seinNULL
esSERIAL
) und die verursachen könnten Ihre Fehler. Entfernen Sie es einfach.