Как загрузить столбец bytea в виде файла с помощью Java

Я хочу загрузить файлы, хранящиеся в формате bytea, с помощью java. У меня нет прав суперпользователя. Используя приведенный ниже код, я загружаю файл с шестнадцатеричной кодировкой и конвертирую его в pdf, но преобразованный pdf файл поврежден, тогда как если я копирую с помощью функции \copy (не могу использовать в java) через терминал, процесс загрузки работает гладко.

        String sql = "(SELECT encode(f,'hex') FROM test_pdf where id='2' LIMIT 1)";
        System.out.println(sql);

        CopyManager copyManager = new CopyManager((BaseConnection) conn);

        FileWriter filew = new FileWriter("/home/sourabh/image.hex");
        copyManager.copyOut("COPY "+sql+"  TO STDOUT ", filew );`

А потом :

xxd -p -r image.hex > image.pdf

person sourabh    schedule 13.10.2015    source источник
comment
Возможный дубликат stackoverflow .com/questions/12196123/.   -  person Gaël J    schedule 13.10.2015
comment
см. также этот образец: stackoverflow.com/a/32623457/180100   -  person    schedule 13.10.2015
comment
Большое спасибо @Gaël & RC. И извините за дублирующий вопрос.   -  person sourabh    schedule 13.10.2015


Ответы (1)


На основе примера из документации для драйвера JDBC PostgreSQL: отлично работает для меня:

try (
        Connection conn = DriverManager.getConnection(
            "jdbc:postgresql://localhost/linkedDB?user=postgres&password=whatever");
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery("SELECT f FROM test_pdf WHERE id='2'");
        FileOutputStream fos = new FileOutputStream("C:/Users/Gord/Desktop/retrieved.pdf")) {
    rs.next();
    byte[] fileBytes = rs.getBytes(1);
    fos.write(fileBytes);
} catch (Exception e) {
    e.printStackTrace(System.err);
}
person Gord Thompson    schedule 13.10.2015