gpt4 book ai didi

java - 使用 JSON_TABLE 和 Java 在 Oracle DB 上同时查询 JSON

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:55 31 4
gpt4 key购买 nike

我实际上想使用 JSON_TABLE 结构查询存储在 Oracle 数据库中的 JSON 字符串。这非常有效。

SQL 查询

SELECT f.val 
from JSON,
JSON_TABLE(json,'$' COLUMNS(val VARCHAR(4000) PATH '$.glossary.GlossDiv.GlossList.GlossEntry.GlossTerm')) as f

数据库中的 JSON 字符串

(顺便说一句,来自 json.org/example.html 的示例 JSON)

{"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}}

现在我想在普通的 Java 应用程序中执行查询。我在五个线程中同时使用它。这就是我重现问题的方式。在我最初的用例中,我在执行此查询的网站上非常快速地按下了一个按钮。

JsonRunnable.java

public class JsonRunnable implements Runnable {

public void run() {

try {

List<String> list = new ArrayList<String>();

java.util.Properties connProperties = new java.util.Properties();
connProperties.put("user", "");
connProperties.put("password", "");

Class.forName("oracle.jdbc.driver.OracleDriver");
String database =
"jdbc:oracle:thin:@myserver.com:1521/DB";
Connection conn = DriverManager.getConnection(database, connProperties);

String sql = "SELECT f.val from JSON, JSON_TABLE(json,'$' COLUMNS(val VARCHAR(4000) PATH '$.glossary.GlossDiv.GlossList.GlossEntry.GlossTerm')) as f";
PreparedStatement s1 = conn.prepareStatement(sql);

s1.execute(sql);
ResultSet rs = s1.getResultSet();

while (rs.next()) {
list.add(rs.getString(1));
}

s1.close();
conn.close();

System.out.println(list.get(0));

} catch (Exception ex) {
System.out.println(ex);
}
}

}

主.java

public class Main {
public static void main(String[] args) {
for(int i = 0;i < 5;i++){
new Thread(new JsonRunnable()).start();
}
}
}

现在,我收到此错误,它告诉我在解析和处理 XML 期间出现错误(错误消息是德语的,但您可以看到 ORA 错误消息):

java.sql.SQLException: ORA-19114: XPST0003 - Fehler beim Parsen des XQuery Ausdrucks: 
ORA-19202: Fehler bei XML-Verarbeitung
jzntSCV1:invState2 aufgetreten

Oracle 驱动程序: OJDBC 7 12.1.0.1

Java:1.8

Oracle DB:Oracle Database 12c 企业版 12.1.0.2.0 版 - 64 位生产

在这种情况下有人可以帮助我吗?我真的不知道如何解决这个问题。非常感谢你们!

最佳答案

您是否安装了最新的补丁集(补丁 24968615:DATABASE PROACTIVE BUNDLE PATCH 12.1.0.2.170117)。这应该可以解决问题。

关于java - 使用 JSON_TABLE 和 Java 在 Oracle DB 上同时查询 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42203221/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com