java - 关闭查询后获取耶拿结果集 - 用于模块化

标签 java database resultset jena

我有以下情况:

  • B 类 有一个方法,该方法接收带有查询的字符串并执行它 并返回结果集

  • A 类 创建 SPARQL 查询并调用 B 类 中的方法。

问题是,当A类取回Resultset对象时,它是空的!当然,因为查询在 B 类 中是关闭的(请参阅 jena.query.ResultSet and jena.query.QuerySolution: empty iterator after SPARQL request )。

我的问题是,如何才能将其模块化?我想要一个仅执行 SPARQL 查询的 B 类,而无需了解结果结构或任何内容。我希望 B 类 处理查询创建和查询关闭,因为 A 类 执行此操作毫无意义。

Class B:

 try {
            Query query = QueryFactory.create(myQuery);
            qe = QueryExecutionFactory.create(query, ontology);
            ResultSet results = qe.execSelect();
            return results;
        } catch (...){
            ...
        } finally {
            ...
                qe.close();
            }

最佳答案

ResultSet 默认情况下几乎总是流式传输,因此您说关闭 QueryExecution 将导致 ResultSet 充当如果为空

您可以使用ResultSetFactory.copyResults()获取ResultSet的可重用内存副本。方法并将其传回,例如

ResultSet results = ResultSetFactory.copyResults(qe.execSelect());

这允许类 B 安全地关闭 QueryExecution 并向调用代码提供非空 ResultSet ,当然假设查询首先生成任何答案!

关于java - 关闭查询后获取耶拿结果集 - 用于模块化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24298748/

相关文章:

php - 有人可以从我的服务器外部访问我的数据库吗?

android - 在 Android 上的数据库中存储资源 ID 的最佳方式

mysql - 短路UNION? (如果第一个子句没有结果,只执行第二个子句)

java - 如何在 Java 1.4 中将值结果集插入到 hashmap 中而不进行迭代?

java - 结果集转换为 JSON。如何打印 json 对象?

java - 以原子方式更新多行

Java Swing - 文本和按钮未显示

java - 如何分析Jar文件?

java - 如何让该项目在按下按钮后暂停给定的时间

mysql - Hive 连接多个表和 where 语句