ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-11-11 19:14:07  阅读:39  来源: 互联网

标签:oracle json sql java database



我实际上想使用构造JSON_TABLE查询存储在Oracle数据库中的JSON-String.效果很好.

SQL查询

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

数据库中的JSON-String

(顺便说一句,来自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);
    }
}

}

Main.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

爪哇:1.8

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

在这种情况下有人可以帮助我吗?我实际上真的迷失了如何解决这个问题.非常感谢你们!

解决方法:

您是否安装了最新的补丁集(补丁24968615:数据库主动捆绑补丁12.1.0.2.170117).
这应该可以解决问题.



标签:oracle,json,sql,java,database
来源: https://codeday.me/bug/20191111/2021876.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有