Estoy tratando de recuperar un blob de una base de datos de postgres usando los controladores jdbc. Es demasiado grande para tener en la memoria así que quiero transmitirlo como una descarga. Intenté usar el método getBinaryStream en ResultSet, pero resulta que este método realmente lo lee todo en la memoria, por lo que no funciona para archivos grandes.Postgresql, JDBC y BLOB de transmisión
Aparentemente, uno puede usar el método getBlob en el conjunto de resultados y obtener presumiblemente la corriente de entrada del blob e ir desde allí, pero ahí es donde me encuentro con mi problema.
PreparedStatement ps = con.prepareStatement("select data from file_data WHERE ID = ?");
ps.setLong(1,file.fileData.id)
ResultSet rs = ps.executeQuery()
if(rs.next()){
rs.getBlob("data")
Ese es el código que estoy ejecutando. Cuando se llega a la última línea se lanza hacia fuera un error que no puedo darle sentido ...
org.postgresql.util.PSQLException: Mala relación tipo long: xxxxxx
"xxxxxx "entonces es el contenido del archivo. Puedes imaginar que eso es bastante largo, pero realmente no es el punto.
Estoy atrapado aquí. ¿Alguien tiene alguna idea sobre lo que está pasando? Diablos, incluso tomaré métodos alternativos para transmitir grandes blobs como descarga.
En mi caso fue 'rs.getBlob (...)' en lugar de 'rs.getBinaryStream (...)'. Nunca tarde para aprender JDBC. –