Парсинг данных из Postgresql в json файл с помощью java
Требуется вытащить из БД postgresql одну таблицу в файл json с помощью программы на java.
У меня получилось только создать запрос, который выводит данные в нужном мне виде через консоль psql
(select row_to_json(t) from(select * from cars) as t)
но в программе на java не выходит, вот что я пытаюсь делать:
String sql = "select row_to_json(t) " +
"into outfile C:\\Users\\79885\\IdeaProjects\\untitled6\\json files\\my1_file.json" +
"from(select * from cars) as t";
stmt.executeUpdate(sql);
Вся программа: PS. в данной программе работают другие команды sql (create, input into, etc.)
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class PostgreSQLJDBC {
public static void main( String args[] ) {
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.postgresql.Driver");
c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "postgres");
System.out.println("Opened database successfully");
stmt = c.createStatement();
String sql = "select row_to_json(t) " +
"into outfile C:\\Users\\79885\\IdeaProjects\\untitled6\\json files\\my1_file.json" +
"from(select * from cars) as t";
stmt.executeUpdate(sql);
stmt.close();
c.close();
} catch ( Exception e ) {
System.err.println( e.getClass().getName()+": "+ e.getMessage() );
System.exit(0);
}
System.out.println("Table created successfully");
}
}
Получаю ошибку: org.postgresql.util.PSQLException: ОШИБКА: ошибка синтаксиса (примерное положение: "C") Думаю, что неправильно пытаюсь создать/обратиться к файлу, подскажите, как правильно это делается
Ответы (2 шт):
Теперь нужно скопировать запрос из консоли IDEA и вставить его в консоль Постгресса. И посмотреть, что тот скажет. Может быть путь не существует? Попробуйте попроще путь.
Я не спец по Postgres, но откуда вы взяли такой синтаксис?
select ... into ... используется для вставки в таблицу, но не в файл.
И что означает outfile? Во многих примерах sql-запросов этот параметр используется для указания имени файла. То есть вместо outfile должно быть определённое значение, а само это слово не нужно.
COPY - очевидно, вам нужна эта команда. Она позволяет копировать данные в файл.
Но этой командой не получится с сервера записать файла на клиенте.
У вас в коде применяется row_to_json. Если использовать именно это функцию, то запрос должен выглядеть просто:
select row_to_json(*) from cars
И в коде Java стандартным способом в цикле читаем значения и пишем в файл.
Другой вариант. Вернее, варианты. Смотрите https://stackoverflow.com/a/24006432/5045688.
Кратко:
SELECT json_agg(t) FROM t