2017-02-23 6 views
0

Ich habe versucht, das Bild aus der Datenbank abzurufen und es der Klasse Person hinzuzufügen. Ich habe das Bild mit Files.copy() in eine neue Bilddatei kopiert und ein neues Image-Objekt erstellt. Aber es scheint, als ob die ganzen Prozess jedes Kopieren zunächst gestartet, so dass alle Bildobjekte haben nur ein Bild bekommen - das letzte kopierte Bild, doch kopieren() -Methode steht vor der Einstellung. Wie man es repariert?Files.copy Methode funktioniert nicht ordnungsgemäß

try { 
    checkConnection(); 
    rs = con.prepareStatement("SELECT * FROM Staff").executeQuery(); 

    while(rs.next()){ 
     InputStream is = rs.getBinaryStream("Photo"); 
     Files.copy(is, Paths.get("src\\ilc\\images\\image.jpg"), StandardCopyOption.REPLACE_EXISTING); 
     Image image = new Image("ilc/images/image.jpg", 100, 100, true, true); 

     Rectangle rectangle = new Rectangle(); 
     persons.add(
       new Person(rs.getString("Name"), 
          rs.getInt("Salary"), 
          rs.getDouble("Influence"), 
          false, 
          false, 
          false, 
          image) 
     ); 
    } 

    rs.close(); 
} 
catch (FileNotFoundException ex) { 
    ex.printStackTrace(); 
} 
catch (SQLException ex) { 
    ex.printStackTrace(); 
} 
catch (IOException ex) { 
    ex.printStackTrace(); 
} 
+0

warum nicht u Bild mit Input erstellen möchten, die Sie nach 'Input haben ist = rs.getBinaryStream ("Foto"); '? Sie müssten "Files.copy" überhaupt nicht verwenden. – Enigo

+0

SIE SIND GENIUS MANN! ES KLAPPT! ICH DANKE DIR SEHR! : D –

+0

toll, froh, es hat funktioniert. Ich habe es als Antwort gepostet, damit wir Ihre Frage schließen können.) – Enigo

Antwort

0

In diesem Fall wird die Lösung nicht Files.copy überhaupt zu benutzen, und erstellen Sie die Image mit InputStream direkt:

InputStream is = rs.getBinaryStream("Photo"); 
Image image = new Image(is, 100, 100, true, true); 
... 
Verwandte Themen