# Bild in Datenbank speichern und wieder anzeigen



## EagleEye (23. Sep 2004)

ich habe folgendes problem ich hab ein bild das wird in der datenbank gepeichert das mache ich einfach mit einem fileinputstream über den ich einlese

```
public void submitImageSQL(String q,String f)throws Exception
  {
    PreparedStatement ps = con.prepareStatement(q);
    ps.setBinaryStream(1,new FileInputStream(f),(int)new File(f).length());
    ps.executeUpdate();
    ps.close();
  }
```

und dann hole ich sie raus aus der datenbank und speichere es wieder in einer datei ab welche ich mir dann als bild anzeigen lasse

```
public ImageIcon submitImageSQL(String s)throws Exception
  {
    ResultSet res = stmt.executeQuery(s);
    res.next();
    InputStream read  = res.getBinaryStream(1);
    FileOutputStream write = new FileOutputStream("tempimage");
    byte[] buff = new byte[1024];
    int len;
    while(0<(len = read.read(buff)))
      write.write(buff,0,len);
    write.close();
    read.close();
    //Thread.sleep(10);
    ImageIcon image = new ImageIcon("tempimage");
    //new File("tempimage").delete();
    return image;
  }
```
nur mein problem ist jetzt das das mit dem anzeigen nicht immer klappt meistens nimmt er noch das alte bild welches er anzeigt
ich habe auch nachgesehn das bild was er aus der datenbank holt ist das richtige
hat jemand eine idee woran das liegen kann?
oder vieleicht eine bessere idee wie ich das bild vieleicht ohne temp datei anzeigenlassen kann
mit imageio hab ich das schonmal probiert gehabt nur da war das problem mit dem einlesen das hab ich nicht hinbekommen 
und wenn ich mit fileinput einlese und dann mit imageio mir das aus der datenbank holen will meckert er überden header

bin für vorschläge hoffen


----------



## akira (23. Sep 2004)

Hi,

also Dein Problem hat erstmal nichts mit dem Datenbankzugiff zu tun, denke ich.

Du kannst Dir den BLOB auch als byte-Array geben lassen und damit Dein Bild erstellen.


----------



## EagleEye (24. Sep 2004)

hmm gestern abend ist mir noch aufgefallen das das nur unter java1.4 ist unter 1.5 läuft das
ne das das was mit der datenbank zutun hat glaube ich auch nicht da es ja immer das richtige geladen wird nur vieleicht hat einer ne bessere idee


----------



## akira (24. Sep 2004)

Wie gesagt, Du kommst ohne temporäre Datei aus, wenn Du



> Dir den BLOB auch als byte-Array geben



läst und daraus das ImageIcon erstellst.


```
byte[] picBytes = res.getBytes(1);
ImageIcon image = new ImageIcon(picBytes);
```


----------



## EagleEye (25. Sep 2004)

jop das hab ich heute probiert ging wunder bar thx für die idee


----------



## EagleEye (25. Sep 2004)

hast du vieleicht auch eine idee wie ich nen object am besten speichern kann inner datenbank mit dem setObject und getObject hatte es die letzten male nich richtig geklappt weil da immer nen classcast kamm


----------



## Guest (26. Sep 2004)

Versuch's mit ObjectInputStream, ObjectOutputStream sowie PreparedStatement.setBinaryStream, 
PreparedStatement.getBinaryStream


----------

