數據庫存儲圖片 Blod格式

  通常狀況下 咱們存取圖片在數據庫都是存一個地址 可是今天接觸到一個 直接把二進制的圖片存在數據庫的問題 html

固然是順利解決了 全部咋這裏作一個總結 java

框架背景 是spring hibernatespring

一下是要注意的幾點sql

1》建表的時候數據庫

A.類型是 blod 格式 要有默認值 (後面代碼裏會講到默認值的做用)app

B.實體類是對應的blod類型是byte框架

2》就是在存儲的時候要注意 寫三條sqldom

第一條 sqlide

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     private String id;  6     private String userId;  7     private byte[] img;  8     private String msg;  9     public String getId() { 10         return id; 11  } 12     public void setId(String id) { 13         this.id = id; 14  } 15     public String getUserId() { 16         return userId; 17  } 18     public void setUserId(String userId) { 19         this.userId = userId; 20  } 21     public String getMsg() { 22         return msg; 23  } 24     public void setMsg(String msg) { 25         this.msg = msg; 26  } 27     
28     public byte[] getImg() { 29         return img; 30  } 31     public void setImg(byte[] img) { 32         this.img = img; 33  } 34  @Override 35     public String toString() { 36         return "TestImg [id=" + id + ", userId=" + userId + ", img=" + img 37                 + ", msg=" + msg + "]"; 38  } 39 }

實現類:(這裏面有不少註釋的內容 我也沒有仔細看 就貼在這裏吧 有心情的時候能夠看喲)

 1     public void save(TestImg tsetImg) throws SQLException {  2         // TODO Auto-generated method stub
 3         Connection conn = null;  4         Statement stmt = null;  5         PreparedStatement pstmt = null;  6         ResultSet rs = null;  7         
 8         conn = DataSourceUtils.getConnection(jdbcTemplate.getDataSource());  9         conn.setAutoCommit(false); 10         stmt = conn.createStatement(); 11         
12         String Sql=    "insert into "+tableName+ 
13                 "(id,msg,user_Id) values ("
14         +Util.getSc(tsetImg.getId()) 15         +","+Util.getSc(tsetImg.getMsg()) 16         +","+Util.getSc(tsetImg.getUserId())+")"; 17  System.out.println(Sql); 18  stmt.executeUpdate(Sql); 19  conn.commit(); 20                 
21                 
22                 
23 // sql = "select fjnr from info_data where fjbh = " +Util.getSc(data.getFjbh())+ " FOR UPDATE "; 24 // rs = stmt.executeQuery(sql); 25 // if(rs.next()){ 26 // Blob blob = (Blob)rs.getBlob(1); 27 //                     //blob.putBytes(1,data.getClnr()); 28 //                     //BLOB b=(BLOB)blob; 29 //                     //System.err.println(data.getClnr().length+"******************4"); 30 // blob.setBytes(1, data.getFjnr()); 31 //                     //System.err.println(blob.getBytes(1, (int)blob.length()).length+"******************6"); 32 // sql = "update info_data set fjnr=?,gxsj=sysdate where fjbh = " +Util.getSc(data.getFjbh()); 33 // pstmt = conn.prepareStatement(sql); 34 // pstmt.setBlob(1, blob); 35 // pstmt.executeUpdate(); 36 // conn.commit(); 37 // }
38          Sql = "select img from "+tableName+
39                  " where id = " +
40                  Util.getSc(tsetImg.getId())+
41                  " FOR UPDATE "; 42  System.out.println(Sql); 43 // stmt.executeUpdate(Sql);//executeUpdate用於執行INSERT、DELETE或者UPDATE以及操做TABLE的語句,返回值是int,表示受到影響的行數,對於操做TABLE的語句而言,返回值爲0。
44          rs = stmt.executeQuery(Sql); 45  System.out.println(rs); 46         if(rs.next()){ 47             Blob blob = (Blob)rs.getBlob(1); 48  System.out.println(blob); 49             //blob.putBytes(1,data.getClnr()); 50             //BLOB b=(BLOB)blob; 51             //System.err.println(data.getClnr().length+"******************4");
52             blob.setBytes(1, tsetImg.getImg()); 53             //System.err.println(blob.getBytes(1, (int)blob.length()).length+"******************6");
54             Sql = "update "+tableName+
55                     " set img=? where id = " +Util.getSc(tsetImg.getId()); 56  System.out.println(Sql); 57             pstmt = conn.prepareStatement(Sql); 58             pstmt.setBlob(1, blob); 59  pstmt.executeUpdate(); 60  conn.commit(); 61  } 62         
63

dao:

 1 import java.sql.SQLException;  2 import java.util.List;  3 
 4 import com.hz.qbzb.bean.TestImg;  5 
 6 public interface TestImgDao {  7 
 8     
 9     public void save(TestImg tsetImg) throws SQLException; 10 
11 
12 }

controller: 

 

 1     public void fileUpload (HttpServletRequest request,HttpServletResponse response,TestImg testImg) throws IOException{  2                response.setContentType("text/html; charset=GBK");  3                MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;  4                Iterator iterator=multipartRequest.getFileNames();  5                MultipartFile file=multipartRequest.getFile("myFile");  6                byte[] b=file.getBytes();  7                System.out.println("length="+b.length);  8                 
 9                 
10 // String datadel=request.getParameter("datadel"); 11 // if(datadel!=null){ 12 // String[] data_array=datadel.split(","); 13 // info.setDatadel(data_array);//設置已有須要刪除的附件 14 // }
15                 try{ 16                     while(iterator.hasNext()){ 17                         String fileData=(String)iterator.next(); 18 // MultipartFile file = multipartRequest.getFile(fileData);
19                         if(file != null && !file.isEmpty()){ 20                             String fileName = file.getOriginalFilename(); 21                             String[] suffixs=fileName.split("\\."); 22                             String suffix = suffixs[suffixs.length-1]; 23                             byte bytes[] = file.getBytes(); 24                             TestImg tImg=new TestImg(); 25  tImg.setImg(bytes); 26                             UserSession userSession = (UserSession)WebUtils.getSessionAttribute(request, "userSession"); 27                             Sysuser sysuser = userSession.getSysuser(); 28                             String uId=sysuser.getBgdh(); 29                             String Id= UUID.randomUUID().toString(); 30  tImg.setId(Id); 31                             tImg.setMsg("測試數據"); 32  tImg.setUserId(uId); 33  testImgDao.save(tImg); 34  } 35  } 36                 }catch(Exception e){ 37 // String s = toolsService.cScriptInfoStr(e.getMessage()); 38 // System.err.println(s);
39  } 40         }

基本上就這樣了 有不足的地方 歡迎補充 多作交流

相關文章
相關標籤/搜索