首页 > 解决方案 > 用java在oracle中获取json

问题描述

我从 oracle 19 数据库中获取 json 时遇到问题。当我尝试使用 orderBy 和访问 json 元素的 where 子句执行查询时,查询的执行花费了大部分时间 - 但我希望这段时间尽可能短并流式传输结果由特定的fetchSize.

虽然我在没有访问 json 元素的 where 子句的情况下尝试它,但它工作正常,但使用这个子句它很糟糕 - 似乎查询首先获取有关 where 子句的所有数据,然后对结果进行排序取决于给定的 orderBy。

CREATE TABLE protocol
    (id VARCHAR2(32) DEFAULT SYS_GUID() NOT NULL PRIMARY KEY,
    newdat DATE DEFAULT sysdate NOT NULL,
    protocoltype VARCHAR2(100),
    data CLOB
    CONSTRAINT ensure_json CHECK (data IS JSON));
try (Connection conn = DriverManager.getConnection(jdbc_url, user, password)) {
    OracleStatement statement = (OracleStatement) conn.createStatement();
    statement.setLobPrefetchSize(-1); //doesn't seem to change anything
    statement.setFetchSize(fetchSize); //doesn't seem to change anything

    for (int i = 0; i < max_count; i++) {
        String sql = "SELECT * FROM protocol pro WHERE pro.data.b_number like '%300%' and pro.data.va_number like '%1%' ORDER BY newdat";
        ResultSet result = statement.executeQuery(sql); // this take the most time

        while( result.next()) {
            doSomething(result.getString("data"));
        }

    }
}
catch (Exception e) {
    e.printStackTrace();
}

我希望statement.executeQuery(sql)尽可能快,并将while( result.next())时间分成多个短片。

标签: javajsonoraclestreamsql-order-by

解决方案


推荐阅读