如何在 JDBC PreparedStatement 中设置公式
Posted
技术标签:
【中文标题】如何在 JDBC PreparedStatement 中设置公式【英文标题】:How to set a formula in a JDBC PreparedStatement 【发布时间】:2011-06-27 14:29:53 【问题描述】:我有一个 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();
本质上是一样的,但在我们的例子中,它真的不是。
【问题讨论】:
您能详细说明一下吗?我对手头的实际问题感到困惑。你提到了什么样的公式,它作为preparedStatement的一部分有什么好处? @Peaches491 编辑以获得更好的信息 【参考方案1】:简单地准备表格的陈述是否有效
insert into row(name, starttime)
values(?, coalesce(?, getdate())
?然后设置一个空的第二个参数应该会导致一个 getdate() 调用?
【讨论】:
@reverend-gonzo @araqnid 我用了你的逻辑conn.prepareStatement("INSERT INTO TableA (colA) VALUES(IFNULL(?, 1))")
但这失败了,但有异常 org.hsqldb.HsqlException: incompatible data type in operation
你能建议吗?谢谢【参考方案2】:
我能想到的唯一选择是,因为您无法更改架构,所以有 2 个准备好的语句,一个在查询中使用默认的 getdate(),另一个带有参数。然后您可以简单地执行以下操作:
PreparedStatement ps = (date == null) ? prepareWithDefault : prepareWithoutDefault;
// Set all variables //
if (date != null)
ps.setDate(date);
ps.execute();
【讨论】:
是的......我认为这确实是解决这个问题的唯一方法......这很糟糕,因为我已经抽象出了 sql以上是关于如何在 JDBC PreparedStatement 中设置公式的主要内容,如果未能解决你的问题,请参考以下文章