Panorama: ho una tabella, semplice semplice, in cui salvo id, nome e bytecode di alcune immagini.
Dato per scontato di aver eseguito la connessione (in conn) a database, quindi lancio la query e leggo il risultato (estraggo quindi l'immagine dal database)
codice:
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM IMAGES WHERE ID=1");
ResultSet rs = pstmt.executeQuery();
//estrazione
while (rs.next()) {
OutputStream fos = new java.io.FileOutputStream(new File("new_" + rs.getString("name")));
InputStream fin = rs.getBinaryStream("img");
byte[] b = new byte[fin.available()];
fin.read(b);
fos.write(b);
fos.flush();
fos.close();
}
Per l'inserimento invece:
codice:
File file = new File("immagine.jpg");
InputStream fin = new java.io.FileInputStream(file);
int fileLength = (int)file.length();
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO IMAGES (NAME, IMG) "+"VALUES (?, ?)");
pstmt.setString(1, file.getName());
pstmt.setBinaryStream (2, fin, fileLength);
pstmt.executeUpdate();
E' il codice tratto dal sito della sun, però da quando hanno messo mano alla documentazione, l'articolo da cui l'ho pescato non lo trovo più... ci sono altri articoli (reference & learning) cercando le chiavi "sql", "blob" e simili