【发布时间】:2016-11-17 20:13:24
【问题描述】:
我的数据库中有一个很大的表。其中一些字段可能为空。
我只是想逃避使用:
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。
【问题讨论】:
-
你的意思是不想使用
setNull()方法?如果您是INSERTing 数据,则无需显式设置值NULL,因为默认情况下缺少的值将是NULL。 -
我认为 Postgres JDBC 驱动程序可以很好地处理
setString(index, null) -
@MickMnemonic 仅当这些列未包含在插入语句中时才是正确的,如果包含它们,则 JDBC 驱动程序应为未明确设置的值提供异常。请参阅 JDBC 4.2 第 13.2.2 节:“如果未为参数提供值,则用于执行
PreparedStatement对象(executeQuery、executeUpdate和execute)的方法将抛出SQLException标记。” -
@Mark,是的,在
INSERT语句中不使用setNull()将意味着您需要动态添加正确数量的绑定占位符并动态生成列列表。并且做这一切可能不值得,尤其是当您使用相同的语句插入多行时。因此,正如您的回答所暗示的,不需要特定的null处理。
标签: java postgresql jdbc