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