我正在尝试使用JDBC PreparedStatement来执行一个带有问号?
作为运算符的SQL语句。 (它是hstore ?|
运营商)
它抛出一个异常告诉我,我没有指定参数org.postgresql.util.PSQLException: No value specified for parameter 1.
。它应该是运营商。有没有办法通过参数检查并直接执行语句?
关于这个问题有一个问题(Escaping hstore contains operators in a JDBC Prepared statement),但我真的需要这个运算符来使索引处理大型数据集。
谢谢
答案 0 :(得分:2)
您可以使用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'];