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.