postgresql - 不能在“set variable = ?”上使用参数化 声明,但硬编码有效
问题描述
我想statement_timeout
在建立 JDBC 连接后更改参数。因此我有以下代码:
PreparedStatement statement = _connection.prepareStatement("set statement_timeout = ?");
statement.setInt(1, (int) _statementTimeout);
statement.execute();
但是execute()
这会导致 SQL 异常清楚地表明我的问号处的语法有错误。
org.postgresql.util.PSQLException: ERROR: syntax error at or near "$1"
Position: 25
我试图搜索这个问题,但找不到任何正确的答案。页面认为我指的SET
是 -UPDATE
子句。
我的问题很简单,为什么参数化不起作用?如果我对值进行硬编码,例如
prepareStatement(String.format("set statement_timeout = %s", _statementTimeout))
一切正常,如预期的那样。或者在设置变量时使用参数化是完全错误的?
解决方案
使用等效的函数调用应该可以工作:
prepareStatement("select set_config('statement_timeout', ?, false)");
statement.setString(1, Integer.toString(_statementTimeout));
statement.execute();
请注意,您需要将值作为字符串传递,因为函数的签名是(text, text, boolean)
推荐阅读
- java - 错误:
与属性不兼容 : (attr) 参考 [弱] - hadoop - MapReduce 输入输出选择性
- javascript - 下拉菜单和内容按国家/地区更改
- java - 在 C 中执行命令行命令并与之交互
- java - 在将记录插入 SQLite 表之前检查记录是否存在
- android - 使用 Vision API 放置 3D 面部过滤器
- global - 在全局宏的名称中使用局部宏
- bash - 我想删除322个文件名的前8个字符
- python - Python Boto3 - 如何在进程开始复制到另一个存储桶之前检查s3文件是否已完全写入
- android - 我需要什么权限才能获取用户的电子邮件?