我有一个PreparedStatement,用于插入一堆包含大量列数据的行。但是,对于其中一个列(时间戳),如果值为null,我希望它在服务器上执行getDate()
。
我知道我可以做new Date()
但这并不会真正起作用,因为由于旧版报告,它需要与另一个自动插入值的列匹配。
我们还要说我无法更改架构并为列添加默认值。
有没有办法可以在PreparedStatement中将公式设置为参数?
编辑添加: 这基本上是目前的情况:
PreparedStatement statement = connection.prepareStatement("insert into row (name, starttime) values (?, ?)")
statement.setString(1, name);
statement.setDate(2, date);
我想要的是,像:
PreparedStatement statement = connection.prepareStatement("insert into row (name, starttime) values (?, ?)")
statement.setString(1, name);
if(date != null)
statement.setDate(2, date);
else
statement.setFormula(2, "getdate()");
我理解:
if(date == null)
date = new Date();
基本上是一回事,但就我们而言,它确实不是。
答案 0 :(得分:4)
是否可以简单地准备表格
的陈述insert into row(name, starttime)
values(?, coalesce(?, getdate())
?然后设置null第二个参数应该导致getdate()调用?
答案 1 :(得分:3)
我能想到的唯一选择是,因为你无法改变模式,就是要有2个预准备语句,一个在查询中使用默认的getdate(),另一个使用参数。然后你可以简单地做一些事情:
PreparedStatement ps = (date == null) ? prepareWithDefault : prepareWithoutDefault;
// Set all variables //
if (date != null) {
ps.setDate(date);
}
ps.execute();