当前位置: 首页 > 知识库问答 >
问题:

使用json_exists查询JSON的JDBC准备语句

曾枫
2023-03-14
select * from TRANSACTION_DUMMY where ID = 'aa'
and JSON_EXISTS(TRANSACTION_DUMMY_INDEX FORMAT JSON, 
 '$.header.lineItems[*].status?(@=="complete")')
select * from TRANSACTION_DUMMY where ID = ?
and JSON_EXISTS(TRANSACTION_DUMMY_INDEX FORMAT JSON, 
'$.header.lineItems[*].status?(@==?)')

共有1个答案

冯嘉荣
2023-03-14

根据文档,json_exists的第二个参数是一个名为json_path_expression的特殊字符串。

如果表达式的值应该动态更改,那么在客户机(Java)端创建它并将其连接到查询中将是最容易的。不能将路径表达式作为绑定变量传递,因为Oracle希望它是文字,即“分析时常量”。正如您所注意到的,如果您试图将表达式作为绑定值传递,您将得到ORA-40454:path表达式,而不是文本错误消息。

下面的代码使用Java的string.format()将表达式注入到SQL模板中:

String sql = "select * from TRANSACTION_DUMMY where ID = 'aa' "
            + "and JSON_EXISTS(TRANSACTION_DUMMY_INDEX_FORMAT_JSON, %s)";
// here you could have some code for modifying jsonPathExpression dynamically, 
// e.g. changing the status based on some criteria
String jsonPathExpression = "'$.header.lineItems[*].status?(@==\"complete\")'";

try (Statement st = myConnection.createStatement(String.format(sql, jsonPathExpression))) {

    ResultSet st = ps.executeQuery();
    // Process result set
}
 类似资料:
  • 我有一个类,其中我使用旧的jdbc方法创建了到h2数据库的连接,该方法编写url并获取连接,我在数据库中创建了一个表,这个表不是java对象,所以我用尽了聪明的方法来为我的方法编写测试 //我还创建了一个表app_user公共void addUser(连接连接,字符串登录,字符串密码,字符串描述)抛出SQLException{ 而我的测试方法看起来像这样,有没有办法让它不那么整洁,更简单,我试图用

  • 问题内容: 我想在我的MySQL服务器上执行以下操作: 这在控制台上工作正常,但在我的Java PreparedStatement中却无法正常工作。它在’;’处引发带有语法错误的异常。分离语句。我喜欢该变量,因为我不必重复查找子句,但是如有必要,我可以重写它。与UNION子句相对应的JOIN也有点尴尬。 谢谢, 约书亚记 问题答案: JDBC从未支持解析定界查询。每次调用都是一次数据库访问。也许您

  • 我有一个遗留代码,不允许使用预先准备好的语句。它使用Spring JDBC和更新查询。要求更新100000行。我有一张地图,上面有行号和需要在特定列中更新的值。 下面是我的当前代码: 我需要将其更改为批量执行,以便在for循环之后,我可以在一次DB命中中执行它。 对于这个需求,使用spring JDBC批处理更新的最佳方式是什么?

  • 但是,我不能让它在JDBC驱动程序上作为一个准备好的语句工作。id的值应该是一个参数,因此我尝试将其作为传递给: 在这里,当我尝试设置参数时,我得到了以下异常: 当我尝试以下任一操作时,参数设置正确:

  • 我们有一个db2 database V9.7FP1 出现此错误消息的可能原因是什么?