你好我有 PostgreSQL 一个匿名 block ,例如,DATA 是 java 中的一个字符串变量(我的匿名 block 在其中)
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();
但它抛出如下异常。
org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0.
at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:63)
at org.postgresql.core.v3.SimpleParameterList.setStringParameter(SimpleParameterList.java:126)
at org.postgresql.jdbc.PgPreparedStatement.bindString(PgPreparedStatement.java:1096)
at org.postgresql.jdbc.PgPreparedStatement.setString(PgPreparedStatement.java:369)
at org.postgresql.jdbc.PgPreparedStatement.setString(PgPreparedStatement.java:353)
at sample.TestMain.main(TestMain.java:20)
任何人都可以帮助我解决这个问题或指出我可以纠正自己的正确资源。
最佳答案
PostgreSQL 协议(protocol)不提供将参数绑定(bind)到非计划语句(或非查询参数点)的方法。这意味着您不能参数化此类语句。换句话说,您不能在这样的 do block 中绑定(bind)参数。
堆栈跟踪显示这是您的问题。您需要自己清理参数并进行字符串插值。
更好的方法是拥有一个可以将这些作为参数传入的函数。
关于java - 从 Java 执行 PostgreSQL anon block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709762/