Tukar BufferedInputStream kepada Imej
Soalan berkenaan dengan menukar objek Blob yang diambil daripada pangkalan data kepada imej menggunakan pengaturcaraan Java. Blob diandaikan mengandungi data imej, tetapi penukaran menghasilkan nilai nol.
Jawapan
Contoh Kod Penuh
Coretan kod berikut memberikan contoh cara untuk mendapatkan dan memaparkan imej daripada pangkalan data H2 menggunakan pertimbangan yang dinyatakan di atas:
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(); } } } }
Atas ialah kandungan terperinci Mengapa kod Java saya menukar objek Blob kepada imej mengembalikan nilai nol?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!