有没有直接在JDBC中禁用参数或执行SQL语句的方法?

时间:2015-03-18 16:30:48

标签: postgresql jdbc hstore

我正在尝试使用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),但我真的需要这个运算符来使索引处理大型数据集。

谢谢

1 个答案:

答案 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'];