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

标签 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),但我真的需要这个运算符来使索引在大数据集上工作。

谢谢

最佳答案

您可以使用 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/

相关文章:

sql - 在 PostgreSQL 中执行 SELECT 语句时可以插入记录吗?

java - MariaDB 是自动断开连接还是我应该手动断开连接?

database - 使用索引对 hstore 字段进行全文搜索

json - Postgresql JSONB 来了。现在该用什么?商店? JSON?伊维?

postgresql - 在 pg_bouncer 后面使用 pg_dump 后,search_path 似乎被更改,其他客户端受到影响

通过 Helm 的 Postgresql 未安装

java - 使用 ResultSet 渲染数据时出错

在 Sybase 中批量创建 JDBC

PostgreSQL:heroku 数据库服务器上的 array_agg() 内存不足问题

Django 从 sqlite3 切换到 Postgresql 问题