Storing Image in Data Base Using Java in Binary Format(使用 Java 以二进制格式将图像存储在数据库中)
问题描述
我正在处理我的项目并遇到一些问题,我搜索了它,但找不到有意义的完整学习资源,我需要的是使用我的 Java 程序将图像存储在 SQL Server 数据库中,并且需要返回检索,图像不是更大的尺寸,它们在 30 到 50 K 之间,我可以使用 toolKit 中的 getImage() 方法从我的磁盘加载图像
I am working around my project and got some Problem, I searched for it , but couldn't find meaning full learning resource, What I need is to Store Image in SQL Server Database using my Java program , and will need that Back to Retrieve, images are not of larger size they are ranging between 30 and 50 K, I can load images from my Disk by using getImage() method in toolKit
Image imm = Toolkit.getDefaultToolkit().getImage("URl");
,但我不知道如何将该图像转换为二进制格式并存储在数据库中,然后从数据库中检索回来.我想通过查看几个站点将其存储在 VarBinary 中,我发现 SQL Server 中的图像类型即将停用.
, but i don't know How to convert that image to Binary Format and to store in Database, and then retrieve Back From Database. I want to Store that in VarBinary s by looking around several sites i found that the image type in SQL Server is soon going to Retire.
推荐答案
虽然在数据库中存储非常大的二进制对象并不是一个好主意,但微软研究论文To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem" 表明如果对象大小小于256K.所以听起来您已经达到了使用 30K 图像进行数据库存储的最佳选择.
While it's not a good idea to store very large binary objects in the database, the Microsoft research paper "To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem" indicates it's an efficient approach if object sizes are less than 256K. So it sounds like you've hit the sweet spot for database storage with 30K images.
您可以使用以下方法从 URL 将图像作为缓冲图像加载:
You can load your image as a buffered image from a URL using:
BufferedImage imm = ImageIO.read(url);
然后将其转换为字节数组:
Then convert it to a byte array with:
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();
然后存储字节数组本文推荐 作为数据库中的 VARBINARY.在您的 JDBC 代码中,您应该将字节数组包装在 ByteArrayInputStream 中,并将 PreparedStatement 参数设置为 BinaryStream:
Then store the byte array as recommended by this article as a VARBINARY in the database. In your JDBC code, you should wrap the byte array in a ByteArrayInputStream and set the PreparedStatement parameter as a 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();
要从数据库中取出图像,请使用 ResultStatement.getBlob():
To get the image out of the database, use ResultStatement.getBlob():
Blob immAsBlob = rs.getBlob();
byte[] immAsBytes = immAsBlob.getBytes(1, (int)immAsBlob.length()));
最后,将字节数组转换为 BufferedImage 并对其进行处理:
Finally, convert the byte array to a BufferedImage and do something with it:
InputStream in = new ByteArrayInputStream(immAsBytes);
BufferedImage imgFromDb = ImageIO.read(in);
这篇关于使用 Java 以二进制格式将图像存储在数据库中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 Java 以二进制格式将图像存储在数据库中
基础教程推荐
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- 存储 20 位数字的数据类型 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
