转义 hstore 包含 JDBC 准备语句中的运算符

2023-11-25

我正在使用带有 hstore 的 PostgreSQL 9.1.4 和PostgreSQL 的 JDBC驱动程序(9.1-901.jdbc4)。

我正在尝试使用包含运算符(?, ?&, ?|)在PreparedStatement中,但是?字符被解析为变量占位符。是否可以转义该字符以在查询中发送正确的运算符?

一个例子:

PreparedStatement stmt = conn.prepareStatement("SELECT a, b FROM table1 WHERE c ? 'foo' AND d = ?");
stmt.setInt(1, dValue);
stmt.executeQuery();

在这种形式下,以下示例将引发异常:

org.postgresql.util.PSQLException: No value specified for parameter 2.

Update:

在调查了 pgjdbc 驱动程序中的查询解析器之后这个片段似乎表明无法逃脱?特点。剩下的问题是:

  • JDBC 规范中是否有任何内容允许?被转义并成为参数占位符以外的任何东西?
  • 对于这个问题,除了使用纯语句并将变量手动插入查询字符串之外,还有更好的解决方法吗?

实际上,java SQL 解析器似乎不兼容 hstore。

但由于语法c ? 'foo'相当于exist(c, 'foo'),您可以轻松解决此问题。看看下面的页面,看看有什么verbosehstore 的运算符是。

Postgres hstore 文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转义 hstore 包含 JDBC 准备语句中的运算符 的相关文章

随机推荐