我實際上想使用構造JSON_TABLE來查詢存儲在Oracle數據庫中的JSON字符串。這工作得很好。使用JSON_TABLE和Java同時在Oracle數據庫上查詢JSON
SQL查詢
SELECT f.val
from JSON,
JSON_TABLE(json,'$' COLUMNS(val VARCHAR(4000) PATH '$.glossary.GlossDiv.GlossList.GlossEntry.GlossTerm')) as f
JSON字符串在DB
(它是由從方式的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
的Java: 1.8
Oracle數據庫: Oracle數據庫12c的企業版發行12.1.0.2.0 - 64位生產
燦有人在這種情況下幫助我?其實我真的很失落如何解決這個問題。非常感謝你們!
對不起,延遲迴復。我們的系統已更新到第2版(Oracle Database 12c企業版版本12.2.0.1.0 - 64位生產版)。現在它工作正常。我沒有嘗試你提到的補丁。但可能這是正確的解決方案。謝謝你的幫助。 – Evoltafreak