Databases Reference
In-Depth Information
String insert = "insert into pictures values(0, ?)";
PreparedStatement prepared = con.prepareStatement(insert);
InputStream is = new FileInputStream(new File("donald.jpg"));
prepared.setBinaryStream(1, is);
prepared.executeUpdate();
prepared.close();
is.close();
Wollen wir mit
select
-Anweisungen ein Bild aus der Tabelle lesen und es in eine
Datei schreiben, nutzen wir dazu die zum Typ
ResultSet
gehörende Methode
getBinaryStream
. Sie liefert einen Stream, den wir auslesen und dann Byte für
Byte in eine Datei schreiben:
String select = "select id, image from pictures where id=0";
ResultSet results = statement.executeQuery(select);
results.next();
int id = results.getInt(1);
Blob blob = results.getBlob(2);
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream(new File(id + ".jpg"));
byte[] buffer = new byte[0xFFFF];
for (int len; (len = in.read(buffer)) != -1;)
out.write(buffer, 0, len);
out.close();
in.close();
results.close();
statement.close();
null
-Werte:
Als hätten uns
null
-Werte nicht schon genug gequält, verfolgen sie
uns auch noch in JDBC.
Wenn in unserer Tabelle
reihen
einer der Werte in der Spalte
baende
den Wert
null
hat, liefert uns - etwa in Listing 18.1 - die Methode
getInt
für diese Spalte
den Wert
0
. Wir können also nicht unterscheiden, ob wir es mit der Zahl
0
oder
dem Wert
null
zu tun hatten. Dieses Verhalten müssen wir selbstverständlich
beachten und setzen dazu die zum Typ
ResultSet
gehörige Methode
wasNull
ein:
String select = "select baende from reihen where id=25";
ResultSet results = statement.executeQuery(select);
results.next();
int volumes = results.getInt("baende");
String text = results.wasNull() ? "null" : volumes + "";
System.out.println(text);
results.close();