使用数据库中的图像存储 Java 以二进制格式

我在项目周围工作,还有一些问题,我正在寻找他 , 但我找不到完整教育资源的含义,所有我需要在数据库中存储图像 SQL Server 使用 Java 我的计划 , 有必要恢复到振荡之间的大尺寸 30 和 50 到
我可以使用该方法从磁盘上传图像 getImage// 在 toolKit


Image imm = Toolkit.getDefaultToolkit//.getImage/"URl"/;


, 但我不知道如何将此图像转换为二进制格式并在数据库中保存,然后从数据库中返回。
我想在varbinary中保存它,审查了几个站点,我发现图像类型 SQL Server 很快就会退休。
已邀请:

董宝中

赞同来自:

虽然在数据库中保持非常大的二进制对象不是一个非常好的主意,但研究工作 Microsoft "
http://research.microsoft.com/apps/pubs/?id=64525
如果物体的尺寸较少,则表示这是一种有效的方法 256 KB。 因此,似乎你进入了一个甜蜜的地方来存储数据库 30 成千上万的图像。

您可以以缓冲图像的形式下载图像 URL 通过:


BufferedImage imm = ImageIO.read/url/;


然后使用以下方式将其转换为字节数组:


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//;


然后保存字节数组
http://social.technet.microsof ... mages
作为 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//;


要从数据库中获取图像,请使用 ResultStatement.getBlob//:


Blob immAsBlob = rs.getBlob//;
byte[] immAsBytes = immAsBlob.getBytes/1, /int/immAsBlob.length////;


最后,转换字节数组 BufferedImage 并与他做点什么:


InputStream in = new ByteArrayInputStream/immAsBytes/;
BufferedImage imgFromDb = ImageIO.read/in/;

八刀丁二

赞同来自:

作为一项规则,不是一个非常好的主意将大资源放入数据库中,例如图像,除非您不需要匹配 ACID 与他们合作时。 抑制数据库和创建它们所需的时间非常越来越大,您必须使用更复杂和易碎的增量备份。

通常,更有效地存储文件系统中的图像,并在确保已成功创建图像资源后,才将路径放入数据库。

要回复问题请先登录注册