3 Stimmen

Konvertiert PreparedStatement leere Zeichenfolgen in Null?

Ich arbeite mit MySQL und ihrem letzten verfügbaren JDBC-Treiber auf einem User Tisch mit NOT NULL Einschränkungen für alle seine Felder, die sind id , name , password y email .

In meiner Java EE-Anwendung rief ich zunächst eine einfache Statement auf diese Weise:

statement = connection.createStatement();
statement.executeUpdate( "INSERT INTO User (name, password, email) "
         + "VALUES ('" + paramName + "', '" + paramPassword + "', '" + paramEmail + "');" );

Wo paramName , paramPassword y paramEmail sind Zeichenfolgen. Ich habe leere Zeichenketten an diese Anfrage übergeben, und eine neue Zeile mit leeren Werten wurde erfolgreich in die Tabelle eingefügt, da MySQL leere Zeichenketten anders als Nulleinträge betrachtet.

Dann habe ich eine PreparedStatement stattdessen:

preparedStatement = connection.prepareStatement( "INSERT INTO User (name, password, email) VALUES(?, ?, ?);" );
preparedStatement.setString( 1, paramName );
preparedStatement.setString( 2, paramPassword );
preparedStatement.setString( 3, paramEmail );
preparedStatement.executeUpdate();

Aber dieses Mal, als ich leere Zeichenfolgen an die Anfrage übergab, erhielt ich die folgende Fehlermeldung:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Spalte 'name' kann nicht null sein

Hier also meine Frage : Ist die PreparedStatement oder vielleicht sein setString() Methode leere Zeichenketten in Nullwerte umwandeln? Ich habe nachgeschaut und in der Javadoc keine Informationen über dieses Verhalten gefunden.

2voto

davidbuzatto Punkte 8917

In der Dokumentation von java.sql.PreparedStatement wird in der Methode setString nichts darüber gesagt. Ich habe einen Blick in die Quellen des MySQL ConnectorJ geworfen und habe auch nichts gefunden. Sind Sie sicher, dass Ihr String nicht null ist?

2voto

Ambrose Punkte 501

Die Antwort lautet NO . Bitte stellen Sie sicher, dass der Wert Ihrer Parameter nicht null ist. Vielleicht ist Ihre Variable paramName es NULL .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X