如何将sparql查询结果转换为字符串数组?

时间:2014-08-22 01:04:08

标签: java sparql jena

这是我拥有的代码,它只返回第一行,我需要能够将所有行作为String处理。我怎么能把ResultSetFormatter.out(ps,results,query)的输出放到一个字符串数组中?

//convert sparql query results into string array
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
ResultSetFormatter.out(ps, results, query);
String queryOutput = new String(baos.toByteArray(), "UTF-8");

System.out.println(queryOutput);

1 个答案:

答案 0 :(得分:1)

您提供的代码输出整个results对象作为ps中的ascii表。如果您只看到一行,那么这是因为您的查询只返回一行,或者因为您需要刷新PrintStream

要验证您只获得一行,请包装结果并打印它们(伪代码):

final ResultSetRewindable r = ResultSetFactory.copyResults(results);
ResultSetFormatter.out(System.out, r, query);
r.reset();
ResultSetFormatter.out(ps, r, query); // Continue as you were

如果你应该获得多行(通过运行前面的代码观察到),请在将其转换为字符串之前添加一个刷新ps的调用:

ps.flush();
String queryOutput = new String(baos.toByteArray(), "UTF-8");

请注意,ps应该包含写入System.out的所有内容,因此如果您在转换baos时没有看到这些值,那么很可能ps没有不会将这些值传输到基础流。 flush会强制转移。

此外,您可能根本不需要ps,因为ResultSetFormatter.out只需要OutputStream。例如,您可以直接写入baos