我正在尝试使用 JDBC PreparedStatement 来执行一个带有问号 ?
作为运算符的 SQL 语句。 (这是 hstore ?|
运算符)
它抛出一个异常告诉我我没有指定参数 org.postgresql.util.PSQLException: No value specified for parameter 1.
。它应该是运营商。有没有办法绕过参数检查,直接执行语句?
我看到IntelliJ中的数据库功能可以直接用JDBC驱动执行SQL,我觉得应该有办法
关于这个问题有一个问题(Escaping hstore contains operators in a JDBC Prepared statement),但我真的需要这个运算符来使索引在大数据集上工作。
谢谢
最佳答案
您可以使用 SQL 函数内联。一个简单的 SQL 函数将被重写(几乎总是)。
CREATE OR REPLACE FUNCTION hstore_contains(hstore, text[]) RETURNS boolean AS $$
SELECT $1 ?| $2;
$$ LANGUAGE SQL;
所以下面的两个查询将得到相同的查询计划并且都将利用索引:
SELECT * FROM tbl WHERE hstore_contains(col1,array['a','b']);
SELECT * FROM tbl WHERE col1 ?| array['a','b'];
关于postgresql - 有什么方法可以直接在JDBC中禁用参数或执行SQL语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29127538/