在准备好的语句中处理 Oracle Date 数据类型的空值的正确方法

Proper way to handle null value for Oracle Date datatype in prepared statement

我有一个包含 20 多个列的数据库,其中一些是具有空值的 date/timestamp 数据类型。

Java 应用程序将从这个 table 读取数据并插入到其他 table。 Prepared Statement用于构造插入查询。插入记录时,我在日期列上得到 "null pointer exception" ,它是空的。对于Varchar,当实际值为null 时,它会自动设置为null。有什么方法可以自动处理带有空值的日期字段,就像准备好的语句中的 varchar 一样?

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);

当然,问题在于您正试图在 date 上调用 getTime,这可能是 null.

Java application will read the data from this table and insert into other table.

如果这是真的,那么我希望 date 已经 java.sql.Date(或 null),你可以直接使用:

ps.setDate(3, date);

如果date确实不是java.sql.Date,那么可以使用条件运算符:

ps.setDate(3, date == null ? null : new java.sql.Date(date.getTime()));

可以将 null 传递给 setDate(与在 setString 中起作用的原因相同)。当您用于列的 Java 类型是基本类型(如 int)时,您只需要 setNull。因为你不能用 null 调用 setIntint 应该是,你会在那种情况下使用 setNull 。不过,这对 setDate 来说不是问题。