Sto provando a recuperare un blob da un database postgres utilizzando i driver jdbc. È troppo grande da avere in memoria, quindi voglio riprodurlo in streaming come download. Ho provato a utilizzare il metodo getBinaryStream su ResultSet, ma si scopre che questo metodo in realtà legge tutto in memoria, quindi non funziona per file di grandi dimensioni.Postgresql, JDBC e flussi BLOB
Apparentemente, è possibile utilizzare il metodo getBlob sul set di risultati e ottenere presumibilmente l'inputstream dal blob e passare da lì, ma è lì che si verifica il 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")
Questo è il codice che sto utilizzando. Quando si arriva a quella ultima linea è buttare fuori un errore che non riesco a dare un senso ...
org.postgresql.util.PSQLException: valore di Bad per tipo lungo: xxxxxx
"xxxxxx "quindi è il contenuto del file. Potete immaginare che diventa piuttosto lungo, ma non proprio il punto.
Sono bloccato qui. Qualcuno ha qualche idea su cosa sta succedendo? Diamine, avrò anche metodi alternativi per lo streaming di grandi quantità di blob come download.
Nel mio caso era 'rs.getBlob (...)' invece di 'rs.getBinaryStream (...)'. Non è mai tardi per imparare JDBC. –