使用 java 从 [=11g=] 数据库检索图像以存储在本地磁盘时出现问题

Issue in retrieving images from mysql databse to store on local disk using java

我使用 java 将图像存储到 mysql 数据库,然后将其转换为 bytes[] 然后 Blob。图片格式为 png 正在尝试从 mysql 数据库中检索图像并将其转换为图像文件以保存在本地磁盘上。

迭代 mysql 结果集为:

while(rs.next())
{
ByteArrayInputStream bis = new ByteArrayInputStream(rs.getBytes("image"));

Iterator<?> readers = ImageIO.getImageReadersByFormatName("png");
ImageReader reader = (ImageReader) readers.next();
Object source = bis; 

ImageInputStream iis = ImageIO.createImageInputStream(source); 
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();

Image image= reader.read(0, param);
BufferedImage bufferedImage = new BufferedImage(image1.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = bufferedImage.createGraphics();
g2.drawImage(image, null, null);

File imageFile = new File(rs.getInt("id")+".png");
ImageIO.write(bufferedImage, "png", imageFile);
}

但它给我错误:

javax.imageio.IIOException: I/O error reading PNG header!

它的原因是:

javax.imageio.IIOException: Bad PNG signature!

我是 java 的新手。我用谷歌搜索但没有找到任何令人满意的解决方案。 谁能帮我解决它或任何其他更好的解决方案来从数据库中检索图像并将其存储在本地磁盘中???

我找到了解决方案。问题出在我的代码中。这是我用来从数据库中获取图像并存储为图像文件的正确代码

sql="select * from image_data where image_id="+image_id;        
        rs = this.runSimpleQuery(sql);
        while (rs.next()) 
        {
            Blob image_blob=rs.getBlob("image_100x100");
            int blobLength = (int) image_blob.length(); 
            byte[] blobAsBytes = image_blob.getBytes(1, blobLength); 
            InputStream in=new ByteArrayInputStream( blobAsBytes );
            BufferedImage image_bf = ImageIO.read(in); 
            ImageIO.write(image_bf, "PNG", new File(folder_path+"/"+rs.getString("name"))); 
        }