有什么方法可以禁用参数或直接在JDBC中执行SQL语句吗?

Any way to disable parameters or execute SQL statements directly in JDBC?

我正在尝试使用 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  ?| ;
$$ LANGUAGE SQL;

因此下面的两个查询将获得相同的查询计划并且都将利用索引:

SELECT * FROM tbl WHERE hstore_contains(col1,array['a','b']);

SELECT * FROM tbl WHERE col1 ?| array['a','b'];