Извлечение файла из bytea в PostgreSQL с использованием Java

Привет, я использую приведенный ниже код, чтобы получить файл из байта postgresql, используя Java, но внутри файла я получаю числа, такие как 314530413142313141

File file = new File("c:/test.doc");
FileOutputStream fos = new FileOutputStream(file);
ResultSet rs = st.executeQuery("SELECT * FROM test_bytea where id=" + 1);
        if (rs != null) {
            while (rs.next()) {

                byte[] fileBytes = new byte[1024];
                InputStream is = rs.getBinaryStream("type_file");
                while (is.read(fileBytes) > 0) {
                    fos.write(fileBytes);
                }

                // use the stream in some way here
            }
            rs.close();
        }    

Пожалуйста, дайте мне знать, что не так в моем коде?

2 ответа

Решение

Данные экранируются (начинаются с \x и затем представляют собой шестнадцатеричные два символа для каждого байта), это то, что выходит из поля bytea. Вы должны удалить его перед сохранением в файле.

Вместо того, чтобы делать это вручную, вы можете использовать Spring:

ResultSet rs = st.executeQuery("SELECT * FROM test_bytea where id=" + 1);
if (rs != null) {
    LobHandler lobHandler = new DefaultLobHandler();
    byte[] myFile = lobHandler.getBlobAsBytes(rs, "type_file"));
    //....
Другие вопросы по тегам