【问题标题】:Getting Jena Resultset after closing query - for modularity关闭查询后获取 Jena 结果集 - 模块化
【发布时间】:2014-08-09 12:40:23
【问题描述】:

我有以下情况:

  • Class B 有一个方法可以接收带有查询的字符串,然后执行它 并返回Resultset

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

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

我的问题是,这怎么能完全模块化?我想要一个Class B,它只执行 SPARQL 查询,而不必知道结果结构或任何东西。我希望Class B 处理查询创建和查询关闭,因为Class A 这样做是没有意义的。

Class B:

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

【问题讨论】:

    标签: java database resultset jena


    【解决方案1】:

    默认情况下ResultSet 几乎总是在流式传输,所以您说关闭QueryExecution 将导致ResultSet 表现得好像它是空的一样

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

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

    这允许 B 类安全地关闭 QueryExecution 并为调用代码提供一个非空的 ResultSet,当然前提是查询首先会产生任何答案!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多