在准备好的语句中处理 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
调用 setInt
而 int
应该是,你会在那种情况下使用 setNull
。不过,这对 setDate
来说不是问题。
我有一个包含 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
调用 setInt
而 int
应该是,你会在那种情况下使用 setNull
。不过,这对 setDate
来说不是问题。