将blob转换为图像流并将其分配给jLabel

我只是尝试将数据库中的blob字符串转换为字节数组,然后转换后转换为缓冲的图像,然后将其分配给标签这是我的代码

package ims.project; import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import javax.imageio.ImageIO; public class readingdata extends JFrame { readingdata() { JPanel pane = new JPanel(); JLabel label1 = new JLabel("help"); JLabel label2 = new JLabel("33"); pane.add(label1); pane.add(label2); setVisible(true); add(pane); try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ims1", "root", "root"); Statement st = con.createStatement(); String ss = "select Pic from supplier where Supplier_id= '" + label2.getText() + "'"; JOptionPane.showMessageDialog(null, label2.getText()); ResultSet rs = st.executeQuery(ss); while (rs.next()) { Blob blob = rs.getBlob("Pic"); int blobLength = (int) blob.length(); byte[] blobAsBytes = blob.getBytes(1, blobLength); final BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(blobAsBytes)); label2.setIcon(new ImageIcon(bufferedImage)); } } catch (Exception ex) { ex.printStackTrace(); } } public static void main(String args[]) { new readingdata(); } } 

但是当我运行这段代码时,它会显示Null指针Stack-trace

 java.lang.NullPointerException at javax.swing.ImageIcon.(ImageIcon.java:228) at ims.project.readingdata.(readingdata.java:47) at ims.project.readingdata.main(readingdata.java:60) 

请尝试以下代码:

 Connection connection = null; PreparedStatement statement = null; ResultSet result; public DisplayImage() { super("Image Display"); setSize(600,600); connection = getConnection(); try { statement = connection.prepareStatement("select content from image where id=1"); result = statement.executeQuery(); byte[] image = null; while(result.next()) { image = result.getBytes("content"); } Image img = Toolkit.getDefaultToolkit().createImage(image); ImageIcon icon =new ImageIcon(img); JLabel lPhoto = new JLabel(); lPhoto.setIcon(icon); add(lPhoto); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } setVisible(true); } public Connection getConnection() { Connection connection = null; try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/db_name", "user", "pass"); } catch (Exception e) { System.out.println("Error Occured While Getting the Connection: - " + e); } return connection; } public static void main(String[] args) { new DisplayImage(); } }