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

3

你好,我正在使用以下代码通过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();
        }    

请告诉我我的代码有什么问题?

确定type_filebytea类型吗?你所描述的行为听起来像是该列被定义为oid - user330315
是的,我非常确定type_file是bytea数据类型的列名。 - Sathish
可能是如何使用Java下载bytea列作为文件的重复问题。 - Gord Thompson
2个回答

1

不必手动操作,您可以使用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"));
    //....

问:「我该如何在Javascript中实现这个功能?」答:「不太确定,但是你可以使用jQuery来实现。那个问题中没有spring标签。」 - oligofren
1
@oligofren 那又怎样?这是另一种可行的方式。别为了无谓的回答而变成“答案纳粹”,伙计 ;) 干杯 - Andrea Ligios

1

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


2
你有任何想法如何实现这个吗? - Sathish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接