Adn*_*han 0 java swing image binary-data sql-server-2008-r2
我正在解决我的项目并遇到一些问题,我搜索了它,但找不到完整的学习资源,我需要的是使用我的Java程序将图像存储在SQL Server数据库中,并且需要返回检索,图像尺寸不大,介于30到50 K之间,我可以使用toolKit中的getImage()方法从我的磁盘加载图像
Image imm = Toolkit.getDefaultToolkit().getImage("URl");
Run Code Online (Sandbox Code Playgroud)
,但我不知道如何将该图像转换为二进制格式并存储在数据库中,然后检索从数据库返回.我想通过查看几个站点将它存储在VarBinary中,我发现SQL Server中的图像类型很快就会退回.
虽然在数据库中存储非常大的二进制对象并不是一个好主意,但微软研究论文" 对BLOB或不对BLOB:数据库或文件系统中的大对象存储"表明,如果对象大小小于256K,这是一种有效的方法.所以听起来你已经达到了30K图像的数据库存储的最佳位置.
您可以使用以下方法将图像作为URL中的缓冲图像加载:
BufferedImage imm = ImageIO.read(url);
Run Code Online (Sandbox Code Playgroud)
然后将其转换为字节数组:
byte[] immAsBytes =
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//use another encoding if JPG is innappropriate for you
ImageIO.write(imm, "jpg", baos );
baos.flush();
byte[] immAsBytes = baos.toByteArray();
baos.close();
Run Code Online (Sandbox Code Playgroud)
然后按照本文的建议将字节数组存储为数据库中的VARBINARY.在JDBC代码中,您应该将字节数组包装在ByteArrayInputStream中,并将PreparedStatement参数设置为BinaryStream:
PreparedStatement pstmt = commection.prepareStatement("INSERT INTO IMAGES (image) VALUES(?)");
ByteArrayInputStream bais = new ByteArrayInputStream(immAsBytes);
pstmt.setBinaryStream(1, bais, immAsBytes.length);
pstmt.executeUpdate();
pstmt.close();
Run Code Online (Sandbox Code Playgroud)
要从数据库中获取图像,请使用ResultStatement.getBlob():
Blob immAsBlob = rs.getBlob();
byte[] immAsBytes = immAsBlob.getBytes(1, (int)immAsBlob.length()));
Run Code Online (Sandbox Code Playgroud)
最后,将字节数组转换为BufferedImage并使用它执行某些操作:
InputStream in = new ByteArrayInputStream(immAsBytes);
BufferedImage imgFromDb = ImageIO.read(in);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9263 次 |
| 最近记录: |