Ho una tabella di database che memorizza i file caricati (file excel) in un campo blob. Ogni record contiene l'uploader, il tempo di caricamento, l'ID di caricamento (chiave primaria) e, naturalmente, il blob stesso.
A un certo punto, ho bisogno di ottenere che i dati dal database facciano qualcosa con esso. Attualmente, ho un POJO che rispecchia solo la struttura della tabella e memorizza il file in un array di byte, cioè;
class Upload {
private String ID;
private ByteArray[] data;
//Other fields and methods ommited for brevity
}
Come sono sicuro che sarete d'accordo, questo lascia l'applicazione aperta ai problemi di memoria se il file è particolarmente grande. In realtà, è improbabile che questo file diventi così grande da causare un problema, ma sicuramente questo non può essere considerato un buon progetto.
Ho cercato di scoprire quali sono le migliori pratiche per i dati di blob a caricamento lento, ma ho difficoltà a trovare materiale che non riguardi l'uso di particolari framework di applicazione.
Penso che ho bisogno di perdere il campo "dati" e ho solo un metodo, es. getData (), che avvia una nuova transazione DB per recuperare il blob restituisce un InputStream ad esso? Vedi sotto per esempio, per favore fammi sapere se c'è un modo migliore per farlo ..
public InputStream getData(){
//Construct and execute SQL query.
Blob blob = rs.getBlob(1);
return blob.getBinaryStream();
}