如何在JDBC PreparedStatement中设置公式

时间:2011-06-27 14:29:53

标签: java sql jdbc prepared-statement

我有一个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();

基本上是一回事,但就我们而言,它确实不是。

2 个答案:

答案 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();