BufferedInputStream in Bild konvertieren
Die Frage bezieht sich auf die Konvertierung eines aus einer Datenbank abgerufenen Blob-Objekts in ein Bild mithilfe der Java-Programmierung. Es wird davon ausgegangen, dass der Blob Bilddaten enthält, aber die Konvertierung führt zu einem Nullwert.
Antwort
Vollständiges Codebeispiel
Der folgende Codeausschnitt bietet ein Beispiel dafür, wie ein Bild abgerufen und angezeigt wird eine H2-Datenbank unter Verwendung der oben genannten Überlegungen:
import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JScrollPane; public class ImageDatabaseExample { public static void main(String[] args) { try { // Load sample image into database saveImage(); // Retrieve and display image loadImage(); } catch (IOException | ClassNotFoundException | SQLException e) { e.printStackTrace(); } } protected static Connection getConnection() throws ClassNotFoundException, SQLException { Class.forName("org.h2.Driver"); return DriverManager.getConnection("jdbc:h2:d:\Image", "sa", ""); } protected static void saveImage() throws IOException, ClassNotFoundException, SQLException { Connection con = getConnection(); PreparedStatement stmt = null; ByteArrayOutputStream baos = null; ByteArrayInputStream bais = null; try { baos = new ByteArrayOutputStream(); BufferedImage img = ImageIO.read(new File("/path/to/file")); ImageIO.write(img, "png", baos); baos.close(); bais = new ByteArrayInputStream(baos.toByteArray()); stmt = con.prepareStatement("insert into images (image) values (?)"); stmt.setBinaryStream(1, bais); stmt.executeUpdate(); } finally { if (stmt != null) { stmt.close(); } if (con != null) { con.close(); } } } protected static void loadImage() throws IOException, ClassNotFoundException, SQLException { Connection con = getConnection(); PreparedStatement stmt = null; ResultSet rs = null; try { stmt = con.prepareStatement("select image from images"); rs = stmt.executeQuery(); while (rs.next()) { Blob blob = rs.getBlob(1); BufferedImage img = ImageIO.read(blob.getBinaryStream()); JOptionPane.showMessageDialog(null, new JScrollPane(new JLabel(new ImageIcon(img)))); } } finally { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (con != null) { con.close(); } } } }
Das obige ist der detaillierte Inhalt vonWarum konvertiert mein Java-Code ein Blob-Objekt in ein Bild und gibt einen Nullwert zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!