3

こんにちは私はjavaを使用してpostgresqlbyteaからファイルを取得するために以下のコードを使用していますが、ファイル内には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();
        }    

コードのどこが悪いのか教えてください。

4

2 に答える 2

1

データはエスケープされます(\ xで始まり、バイトごとに16進数の2文字です)これは、byteaフィールドから出力されるものです。ファイルに保存する前に、エスケープを解除する必要があります。

于 2012-10-01T13:24:06.117 に答える
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"));
    //....
于 2013-04-08T15:53:40.167 に答える