Java PreparedStatementは、Null値を明示的に設定する可能性を提供します。この可能性は次のとおりです。
prepStmt.setNull(parameterIndex, Types.VARCHAR);
この呼び出しのセマンティクスは、nullパラメーターを指定して特定のsetTypeを使用する場合と同じですか?
prepStmt.setString(null);
?
回答:
このガイドによると:
6.1.5INパラメータとしてJDBCNULLを送信する
setNullメソッドを使用すると、プログラマーはJDBC NULL(汎用SQL NULL)値をINパラメーターとしてデータベースに送信できます。ただし、パラメータのJDBCタイプを指定する必要があることに注意してください。
Java null値がsetXXXメソッドに渡されると(Javaオブジェクトを引数として取る場合)、JDBCNULLもデータベースに送信されます。ただし、メソッドsetObjectは、JDBCタイプが指定されている場合にのみnull値をとることができます。
そうです、それらは同等です。
preparedStatement.setNull(index, java.sql.Types.NULL);
それはどんなタイプでも機能するはずです。場合によっては、次のようにサーバー側で障害が発生します。SQLの場合:
COALESCE(?, CURRENT_TIMESTAMP)
Oracle 18XE
間違ったタイプで失敗します:expected DATE
、got--STRING
これは完全に有効な失敗です。
結論:電話する場合はタイプを知っておくとよいでしょう .setNull()