java - 用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())
时间分成多个短片。
解决方案
推荐阅读
- javascript - Javascript 查询
- java - Jgroups 简单聊天应用程序在外部网络或两个不同子网中进行点对点通信
- php - 使用php和ajax提交html表单
- python - OpenPyXL - 只读:如何在不知道何时发生的情况下跳过空行?
- javascript - 使用 TypeScript 冻结导出
- angular6 - Formgroup 控制 Angular 6 中的验证
- javascript - 以下关闭示例未正确返回
- android - Android RecyclerView 滚动条不起作用
- java - 如果使用 exec() 将外部应用程序定义为 Java 中的无效 Win32 应用程序,如何调用外部应用程序?
- visual-studio-2015 - 获取特定变更集的唯一文件列表