如何显示从MS Access的图像在Java的NetBeans的JPanel(How to show

2019-07-04 23:47发布

我使用的代码:

private void okActionPerformed(java.awt.event.ActionEvent evt)        
{                                   
    try {
        String Update = name.getText();

        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection connection = DriverManager.getConnection("jdbc:odbc:NewPData");
        PreparedStatement psmnt = connection.prepareStatement("SELECT Image FROM Table1 where Name='" + Update + "'");
        ResultSet rs = psmnt.executeQuery();
        Blob blob = rs.getBlob("Image");
        int b;
        InputStream bis = rs.getBinaryStream("Image");

        FileOutputStream f = new FileOutputStream("Image.jpg");
        while ((b = bis.read()) >= 0) {
            f.write(b);
        }
        f.close();
        bis.close();

        icon = new ImageIcon(blob.getBytes(1L, (int) blob.length()));

        lblImage.setIcon(icon);

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

异常表现:

       java.lang.UnsupportedOperationException

我已经先存储在MS Access的图像,现在我想表明它的标签上。 请帮忙。

Answer 1:

这部分代码是没有意义的。

Blob blob = rs.getBlob("Image");
int b;
InputStream bis = rs.getBinaryStream("Image");

FileOutputStream f = new FileOutputStream("Image.jpg");
while ((b = bis.read()) >= 0) {
    f.write(b);
}
f.close();
bis.close();

icon = new ImageIcon(blob.getBytes(1L, (int) blob.length()));

你基本上读取结果BLOB设置为一个文件,然后尝试再次读取它来构建你的形象。 这有可能是你已经用尽流。

为什么不直接读取图像?

icon = new ImageIcon("Image.jpg");

更好的是,为什么不采取优势ImageIO API和直接读取数据流,用于持续需要写出一个临时文件?

BufferedImage image = ImageIO.read(bis); 
icon = image == null ? null : new ImageIcon(image);


文章来源: How to show an image from ms access to jpanel in java netbeans
标签: java jdbc