如何逃避使用PreparedStatement.setNull?

时间:2016-11-17 20:13:25

标签: java postgresql jdbc

我的DataBase中有一个非常大的表。其中一些字段可能为空。

我只想逃避使用:

PreparedStatement.setNull(index, Type.X)

像:

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

有更好更清洁的方法吗?

P.S。:我正在使用PostgreSQL。

1 个答案:

答案 0 :(得分:3)

setNull的主要用例是将基本类型设置为null,并处理一些边缘情况,其中驱动程序无法知道参数的数据类型,需要明确指示。< / p>

在大多数情况下,您应该能够使用setString(idx, null)(或另一种对象类型的setXXX)。

引用JDBC 4.2第13.2.2.4节:

  

如果将Java null传递给任何带有Java对象的setter方法,则该参数将设置为JDBC NULL

对“无类型”&#39;进行了例外处理。 null(例如,使用setObject),建议为了获得最大的可移植性,您应该使用setNull或带有类型参数的setObject,而不是所有数据库支持类型信息。