有什么方法可以禁用参数或直接在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'];
我正在尝试使用 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'];