4

我只是想将数据库中的 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();
    }
}

但是当我运行这段代码时,它会显示空指针堆栈跟踪

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

1 回答 1

2

请尝试以下代码:

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();
}

}
于 2013-05-25T10:11:40.797 回答