数据库存储图片 Blod格式

本文介绍了如何在Spring Hibernate框架下将图片以Blob格式存储到数据库中,包括建表注意事项、存储过程及相关的SQL操作。强调了在更新Blob字段时的特殊处理,如使用FOR UPDATE锁定记录,确保数据一致性。还提到了Util.getSc工具类在处理图片二进制数据中的应用,以及涉及的实体类、DAO和Controller的实现。
摘要由CSDN通过智能技术生成

  一般情况下 我们存取图片在数据库都是存一个地址 但是今天接触到一个 直接把二进制的图片存在数据库的问题 

当然是顺利解决了 所有咋这里做一个总结 

框架背景 是spring hibernate

一下是要注意的几点

1》建表的时候

A.类型是 blod 格式 要有默认值 (后面代码里会讲到默认值的作用)

B.实体类是对应的blod类型是byte

2》就是在存储的时候要注意 写三条sql

第一条 sql

insert into Test_Img(id,msg,user_Id) values ('f018469a-b9bb-4081-8d23-4aba14b80f41','测试数据','0991-4849655')

不要set这个byte类型的字段 其余的都先添加进去 因为这个byte的字段要单独的set进去那就是要涉及到第二条sql sql先看一下第二条sql

第二条 sql

select img from Test_Img where id = 'f018469a-b9bb-4081-8d23-4aba14b80f41' FOR UPDATE

这条sql主要的作用的查到这条数据  FOR UPDATE的意思是锁定这张表 (在锁定之后其他用户是不能操作这张表的 这也是这个方法的弊端)

我现在把前提工作做完之后开始要写入数据了  

第三条 sql

update Test_Img set img=? where id = 'f018469a-b9bb-4081-8d23-4aba14b80f41'

光有sql还不ok 还要有 一些图 (这里不做多的解释 下面会有代码  其中用到的Util.getSc(tsetImg.getId()  也会有)

这样就顺利的存储完成了 

下面是详细的代码 :

Util.getSc的工具类 (这个方法我也没有仔细的研究i  别人写的我直接拿来用的 )

 1 static public String getSqlPlaceCh(String str) {
   // 将查询字串里的'用‘’代替,并且输出加引号的字串
 2         // return str.replaceAll(".*([';]+|(--)+).*", " ");    
 3         if (str == null || str.length() == 0)
 4             return null;
 5         StringBuffer sb = new StringBuffer(str.length());
 6         for (int i = 0; i < str.length(); i++) {
 7             switch (str.charAt(i)) {
 8             case '\'':
 9                 sb.append("\'\'");
10                 break;
11             /*
12              * case'\"': sb.append("\\\""); break; case'\\': sb.append("\\\\");
13              * break;
14              */
15             default:
16                 sb.append(str.charAt(i));
17                 break;
18             }
19         }
20         String result = sb.toString();
21         return "\'" + result + "\'";
22     }

实体类:

 1 import java.sql.Blob;
 2 
 3 public class TestImg {
 4     
 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值