从java执行PostgreSQL anon块

时间:2016-06-08 18:03:35

标签: java postgresql jdbc

嗨我有PostgreSQL一个匿名块,例如,DATA是java中的一个String变量(我的匿名块)

bounds

我正在执行上面的块

DO $$DECLARE  new_issue  text;
BEGIN
   new_issue := ?; 
   UPDATE FORM9902 SET HAS_ISSUE = 'Y',ISSUE_DESC = ISSUE_DESC || new_issue
   WHERE FORM990_ID = ?;
 END $$;

但是如下所示抛出异常。

PreparedStatement preparedStatement = connection.prepareStatement(DATA);
preparedStatement.setString(1, "hai");
preparedStatement.setLong(2, new Long(0));

preparedStatement.executeUpdate();

任何人都可以帮助我,或者指出正确的资源,我可以纠正自己。

2 个答案:

答案 0 :(得分:2)

PostgreSQL协议没有提供将参数绑定到非计划语句(或非查询参数点)的方法。这意味着您无法参数化此类语句。换句话说,你不能在这样的do块中绑定参数。

堆栈跟踪显示这是您的问题。您需要自己清理参数并进行字符串插值。

更好的方法是使用一个函数,您可以将它们作为参数传递。

答案 1 :(得分:0)

String updsql = " UPDATE FORM9902 SET HAS_ISSUE = 'Y', ISSUE_DESC = ISSUE_DESC || ? WHERE FORM990_ID = ? ";
PreparedStatement preparedStatement = connection.prepareStatement(updsql);
preparedStatement.setString(1, "hai");
preparedStatement.setLong(2, 0L);

preparedStatement.executeUpdate();