0

我使用的代码:

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 访问中,现在我想在标签上显示它。请帮忙。

4

1 回答 1

3

这部分代码没有意义。

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");

更好的是,为什么不利用ImageIOAPI 直接读取流,而不需要写出一个临时文件呢?

BufferedImage image = ImageIO.read(bis); 
icon = image == null ? null : new ImageIcon(image);
于 2012-12-12T05:14:11.513 回答