2016-11-17 1 views
0

私は自分のデータベースに非常に大きなテーブルを持っています。これらのフィールドの一部はnullになることがあります。使い方から逃げる方法PreparedStatement.setNull?

私はちょうど使用から脱出したい

PreparedStatement.setNull(index, Type.X) 

同様:

if(obj.getSomaData() == null){ 
    insertStmt.setNull(++i, java.sql.Types.VARCHAR); 
}else{ 
    insertStmt.setString(++i, obj.getSomaData()); 
} 

これを行うには良いときれいな方法はありますか?

P .:私はPostgreSQLを使用しています。

+0

あなたは 'setNull()'メソッドを使いたくないのですか?データを 'INSERT 'している場合は、デフォルトで' NULL'になるため、NULL値を明示的に設定する必要はありません。 –

+1

私はPostgres JDBCドライバが 'setString(index、null)'をちょうど細かく処理すると思います –

+0

@MickMnemonicこれは、それらのカラムがinsert文に含まれていない場合にのみtrueです。明示的に設定されていない値。 JDBC 4.2の13.2.2節を参照してください。_ "PreparedStatementオブジェクト(' executeQuery'、 'executeUpdate'、' execute')を実行するメソッドは、パラメータマーカーに値が指定されていない場合、 'SQLException'を投げます。 "_ –

答えて

3

プライマリユースケースsetNullは、プリミティブ型をnullに設定し、ドライバがパラメータのデータ型を知ることができず、明示的に指示する必要があるいくつかのエッジケースを処理するためのものです。

ほとんどの場合、setString(idx, null)(または別のオブジェクトタイプのsetXXX)を使っても問題ありません。

JDBC 4.2節13.2.2.4引用すると:Javaのnullは、Javaオブジェクトを取るsetterメソッドのいずれかに渡された場合

を、パラメータは、JDBC NULLに設定されます。最大の移植のためにあなたがsetNullまたはタイプなしということではない、すべてのデータベースのサポートとして、型パラメータを取るsetObjectを使用する必要があることが示唆された例外が(setObjectを使用して例えば)「型なし」nullのために作られ

、情報。

関連する問題