私はMySQLとその最後の利用可能なJDBCドライバーを、すべてのフィールドに制約のあるテーブルでUser
使用しています.NOT NULL
id
name
password
email
私の 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 でこの動作に関する情報が見つかりませんでした。