我有一个包含20多个列的数据库,其中一些是具有空值的date
/ timestamp
数据类型。
Java应用程序将从该表读取数据并将其插入其他表。准备语句用于框架插入查询。当插入记录时,在日期列(无论它为空)上都会得到“空指针异常” 。对于Varchar
,当实际值为null时,它将自动设置为null。有什么方法可以像准备好的语句中的varchar
一样自动处理具有空值的Date字段?
PreparedStatement ps = null;
....
....
ps.setDate(3, new java.sql.Date(date.getTime())); //date is Java.Util.Date
出错。所以我像下面这样手动处理
if(date!= null)
ps.setDate(3, new java.sql.Date(date.getTime()));
else
ps.setNull(3, Types.DATE);
答案 0 :(得分:1)
当然,问题在于您试图在getTime
上调用date
,该电话可能是null
。
Java应用程序将从该表中读取数据并插入其他表中。
如果是这样,那么我希望date
已经成为java.sql.Date
(或null
),您可以直接使用它:< / p>
ps.setDate(3, date);
如果date
确实不是java.sql.Date
,则可以使用条件运算符:
ps.setDate(3, date == null ? null : new java.sql.Date(date.getTime()));
可以将null
传递到setDate
中(出于与setString
相同的原因)。仅当您要在列中使用的Java类型是原始类型(例如setNull
)时,才需要int
。由于您无法使用setInt
所在的null
来调用int
,因此在这种情况下,请使用setNull
。不过,setDate
并不是问题。