使用java从PostgreSQL中的bytea检索文件

时间:2012-08-30 11:43:21

标签: java postgresql postgresql-9.1 binarystream bytea

您好我正在使用以下代码使用java从postgresql bytea中检索文件,  但在文件中我得到的数字如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 个答案:

答案 0 :(得分:1)

数据被转义(以\ x开头,然后是每个字节的十六进制两个字符)这是来自bytea字段的内容。在将其存储在文件中之前,你需要先将其取消。

答案 1 :(得分:0)

您可以使用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"));
    //....