2

私はMySQLとその最後の利用可能なJDBCドライバーを、すべてのフィールドに制約のあるテーブルでUser使用しています.NOT NULLidnamepasswordemail

私の Java EE アプリケーションでは、最初に次のようにシンプルに呼び出しましたStatement

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

paramNameparamPasswordおよび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 でこの動作に関する情報が見つかりませんでした。

4

2 に答える 2

3

答えはNOです。パラメータの値が null でないことを確認してください。多分あなたの変数paramNameNULLです。

于 2012-07-16T03:21:17.563 に答える
2

java.sql.PreparedStatatement のドキュメントでは、メソッド setString でこれについて何も述べていません。MySQL ConnectorJ のソースを調べましたが、何も見つかりませんでした。あなたの文字列がnullではないことを確信していますか?

于 2012-07-16T03:11:03.630 に答える