Как преобразовать результат запроса sparql в массив строк?

Это код, который у меня есть, и он возвращает только первую строку, мне нужно иметь возможность обрабатывать все строки как 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 ответ

Код, который вы предоставили, должен выводить весь объект results в виде таблицы ascii в ps. Если вы видите только одну строку, то это потому, что ваш запрос возвращает только одну строку или потому, что вам нужно очистить PrintStream

Чтобы проверить, что вы получаете только одну строку, оберните результаты и распечатайте их (псевдокод):

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

Если вы должны получать более одной строки (как это наблюдается при запуске предыдущего кода), добавьте вызов flush ps до преобразования его в строку:

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

Обратите внимание, что ps должен содержать все, что было записано в System.out, поэтому, если вы не видите эти значения при преобразовании baos, то, вероятно, ps не передал эти значения в базовый поток. flush заставит эту передачу произойти.

Кроме того, вам может не понадобиться ps вообще, потому что для ResultSetFormatter.out нужен только OutputStream. Например, вы можете просто написать прямо в baos.

licensed under cc by-sa 3.0 with attribution.