如何使用 Java 将 bytea 列下载为文件
How to download bytea column as file using Java
我想使用 java 下载以 bytea 格式存储的文件。我没有超级用户权限。使用下面的代码,我下载了十六进制编码文件并将其转换为 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
基于 PostgreSQL JDBC 驱动程序 documentation 中的示例,以下对我来说工作正常:
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);
}
我想使用 java 下载以 bytea 格式存储的文件。我没有超级用户权限。使用下面的代码,我下载了十六进制编码文件并将其转换为 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
基于 PostgreSQL JDBC 驱动程序 documentation 中的示例,以下对我来说工作正常:
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);
}