私はMySQLとその最後の利用可能なJDBCドライバーを、すべてのフィールドに制約のあるテーブルでUser使用しています.NOT NULLidnamepasswordemail
私の Java EE アプリケーションでは、最初に次のようにシンプルに呼び出しましたStatement。
statement = connection.createStatement();
statement.executeUpdate( "INSERT INTO User (name, password, email) "
+ "VALUES ('" + paramName + "', '" + paramPassword + "', '" + paramEmail + "');" );
paramName、paramPasswordおよびparamEmailは文字列です。このリクエストに空の文字列を渡しました。MySQL は空の文字列を null エントリとは異なると見なすため、空の値を持つ新しい行がテーブルに正常に挿入されました。
次に、PreparedStatement代わりに a を使用しました:
preparedStatement = connection.prepareStatement( "INSERT INTO User (name, password, email) VALUES(?, ?, ?);" );
preparedStatement.setString( 1, paramName );
preparedStatement.setString( 2, paramPassword );
preparedStatement.setString( 3, paramEmail );
preparedStatement.executeUpdate();
しかし今回、リクエストに空の文字列を渡したところ、次のエラーが発生しました。
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列 'name' を null にすることはできません
だからここに私の質問があります: PreparedStatement、またはおそらくそのsetString()メソッドは、空の文字列をnull値に変換しますか? 調べてみましたが、javadoc でこの動作に関する情報が見つかりませんでした。