精华内容
下载资源
问答
  • 一般情况下 我们存取图片数据库都是存一个地址 但是今天接触到一个 直接把二进制的图片存在数据库的问题 当然是顺利解决了 所有咋这里做一个总结 框架背景 是spring hibernate 一下是要注意的几点 1》建表的...

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

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

    框架背景 是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     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         }

    基本上就这样了 有不足的地方 欢迎补充 多做交流

      

    转载于:https://www.cnblogs.com/zhbx/p/8583619.html

    展开全文
  • BloB类型就是以二进制的形式把图片保存到数据库中。包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。 TinyBlob 最大 255字节 ( 1024Byte(字节)=1KB ) Blob ...
    BloB类型就是以二进制的形式把图片保存到数据库中。包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。

    TinyBlob 最大 255字节      ( 1024Byte(字节)=1KB )

    Blob 最大 65KB

    MediumBlob 中等16M
    LongBlob 最大 4G

    我自己是以表单里选择上传文件的形式(图片也可以看作是一种文件)来把图片插入到数据库中的。

    以下是代码:

    public class Info {
                   private File photo;
    	       private Date datetime;
    		public File getPhoto() {
    			return photo;
    		}
    		public void setPhoto(File photo) {
    			this.photo = photo;
    		}
                   public Date getDatetime() {
    			return datetime;
    		}
    		public void setDatetime(Date datetime) {
    			this.datetime = datetime;
    		}

    public class infoDao {
    	//把Found数据放入到数据库中
          public int InsertFound(Info info){
        	  PreparedStatement pst=null;
        	  int rs=0;
        	  DBcoon coon=new DBcoon();
        	  Connection coona=coon.getCoon();//连接数据库
        	  String sql_insert="insert into found(title,name,photo,datetime) values (?,?,?,?)";//sql语句
        	  
        	  try {
    			pst=coona.prepareStatement(sql_insert);
    			pst.setString(1, info.getTitle());
    			pst.setString(2, info.getName());
    			
    	      
    			InputStream str=new FileInputStream(info.getPhoto());//把图片放进数据库中
    			long length=(long)str.available();//来获取文件的大小
    			pst.setBinaryStream(3, str, length);//public final void setBinaryStream(int parameterIndex,java.io.InputStream x,long length)
    
    			
                        DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM); //规定日期格式ʽ2005-8-8 9:17:42 
    		    String datetime=mediumDateFormat.format(new Date());// new Date()获取系统时间
    		  
    			pst.setString(4, datetime);
    		
    			rs=pst.executeUpdate();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        	 return rs;  
          }

    根据title可以查询到需要显示的图片的记录,然后获取图片

    InputStream is=rst.getBinaryStream("photo");//rst就是结果集
    		        session.setAttribute("rst",is);//把结果放到session中


    有一个可以形成图片的servlet或jsp,我是拿jsp写的。名字为images.jsp

    <%@ page import="java.sql.*" %>
     <%@ page import="java.io.*" %>
     <%@ page import="java.util.*" %>
    <% 
        InputStream is = (InputStream)session.getAttribute("rst");
         OutputStream os=null;
         response.setContentType("text/html");
         os = response.getOutputStream();
         
         byte[] buffer=new byte[1024];//一次传的文件量
    		int len=0;
    		try {
    			while((len=is.read(buffer))>0){//读
    				os.write(buffer, 0, len);//写 (,起始位置,长度)
    			}
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    	}      //以下两行代码不可少,会显示不出图片 原因为 jsp中 response.getWriter()和response.getOutputStream()相互冲突
                    out.clear();
                    out=pageContext.pushBody();
    %>


    然后在你需要显示图片的页面中写

    <img width="300" height="300" src="images.jsp">

    这就完成了。总体思想是要想获取一张图片,必须要根据该图片的特征(就是我文中提到的title)在数据库中查找出有该图片的记录,然后再获取它在数据库中的二进制,最后用OutputStream形成图片。
    那么如果全部查询(select * from found),想把每一张图片都显示在同一页面,又该怎么办?看下一篇文章。





    展开全文
  • 最近一段时间在弄nodejs 的应用,遇到一个场景,以前用flex 开发了一个app,app录入数据填写进本地的sqlite数据库,其中app上传的图片文件以二进制流(byteArray)格式存储数据库中的image字段(blob),现在需要...

        最近一段时间在弄nodejs 的应用,遇到一个场景,以前用flex 开发了一个app,app录入数据填写进本地的sqlite数据库,其中app上传的图片文件以二进制流(byteArray)格式存储进数据库中的image字段(blob),现在需要通过nodejs 读取该数据并存储为图片格式,这时遇到了遇到了一个问题使用buff存储的时候图片显示不出来,这个问题卡了我好几天后来对二进制文件进行比对(同一张图片 使用nodejs直接读图片的流数据以及从数据库中图片的流数据)发现nodejs中尽然多了一些数据,开始的5个byte数据居然是冗余的!!!!!!!!!!!!!把前面5个数据去掉之后图片就能正常显示了!!!!!!!!!!!!

        ps:不知道是flex 在数据上传中加的头文件还是nodejs在读库是加的,后续还需要跟进

            自己记录一下免的忘了

    展开全文
  •  在数据库的开发过程中,经常需要在数据库存储一些备注信息,而这些备注信息的内容一般较大,格式多样-如有可能是语音文件、视频文件、图片文件、文本文件等,怎样实现这些格式不同的备注文件的存取及预览,一直...
  • 此文接上篇 主要想讲一下图片的下载 框架背景 :spring + hibernate 看代码 ok 走你 1 public void getDate(HttpServletRequest request, HttpServletResponse response,String id) throws Exception { 2 ...

    此文接上篇 主要想讲一下图片的下载 

    框架背景 :spring + hibernate 

    看代码  ok 走你

     1 public void getDate(HttpServletRequest request, HttpServletResponse response,String id) throws Exception {
     2         Connection conn = null;
     3         PreparedStatement ps =null;
     4         ResultSet rs = null;
     5         response.reset();
     6         //response.setContentType("image/*;charset=GBK");
     7         //response.setContentType("image/jpeg");
     8         //response.setContentType("text/html; charset=GBK");
     9         response.setContentType("unknown"); 
    10         
    11         try{
    12             conn = DataSourceUtils.getConnection(jdbcTemplate.getDataSource());
    13             String sql = "select img,msg,filename from "+tableName+" where id = " +"'"+id+"'";
    14             System.out.println(sql);
    15             ps = conn.prepareStatement(sql);
    16             rs = ps.executeQuery();
    17             if(rs.next()){
    18                 Blob blob = rs.getBlob("img");
    19                 String name=rs.getString("filename");
    20                 response.addHeader("content-disposition", "attachment;filename=\"" + name+"\"");
    21                 //response.setContentType("application/x-download"); 
    22                 //response.setContentType("application/x-msdownload");
    23                 //response.addHeader("Content-Disposition","attachment;filename="+clmc+"."+cllx);
    24                 InputStream pi = blob.getBinaryStream();
    25                 OutputStream sos = response.getOutputStream();
    26                 byte bytes[] = new byte[(int)((BLOB)blob).length()];
    27                 for(int n = 0; (n = pi.read(bytes)) != -1;)sos.write(bytes, 0, n);
    28                 pi.close();
    29                 sos.flush();
    30             }
    31         }catch(Exception ex){
    32             DataSourceUtils.releaseConnection(conn, jdbcTemplate.getDataSource());
    33             throw new Exception("执行时出错!" + ex.getMessage());
    34         }finally{
    35             if(rs!=null)rs.close();
    36             if(ps!=null)ps.close();
    37             if(conn!=null){
    38                 try{
    39                     DataSourceUtils.releaseConnection(conn,jdbcTemplate.getDataSource());
    40                 }catch(Exception ex){
    41                     ex.printStackTrace();
    42                 }
    43             }
    44         }
    45     }

    看完之后你会发现 其实很简单

    就是 用

     response.addHeader("content-disposition", "attachment;filename=\"" + name+"\"");


    下一篇可能要学一下 request 和 respones 的一些讲解(当然也是来自网络的资源我是小白 自己做好 学习笔记就好 )

    转载于:https://www.cnblogs.com/zhbx/p/8601267.html

    展开全文
  • 用C++ connector实现mysql以二进制格式图片存储数据库以及从数据库获取图片并显示,亲测通过,请放心使用,如有问题可留言给我。
  • 数据库sqlite 存储图片

    2013-07-08 17:16:00
    SQLite可以存储 BLOB(binary large object,二进制大对象)格式数据,利用它可以在安卓应用开发中存储图片资源。 这里先讲下,怎样把数据从数据库中取出,并显示在imagView中。 代码如下: private ImageView ...
  • Ubuntu18.4下QT使用model显示mysql数据库中存储的图片时出现乱码 数据库图片存储格式为mediumblob ![图片说明](https://img-ask.csdn.net/upload/202005/31/1590892468_229178.png)
  • 2、在C#中读取存储数据库中的格式image图片,是通过Byte[]数组来读取的。 1 //将数据库中读取的二进制数组先读取到内存流中 2 MemoryStream ms= new MemoryStream(imgBytes); 3 //实例化一个...
  • 可以讲二进制数据存储数据库中,也可以将base64位... * 上传图片,并且转化为二进制存储数据库, * mvc返回json会自动将二进制数据转化为base64位 * @param request * @param file * @return * @throws IOEx...
  • 基本思想:1 ,单独建立一个页面用于显示图片(如:photo.aspx)2,需要显示图片的页面(List.aspx)中的图片显示控件的url指向photo.aspx举个例子: //photo.aspx.cs protected void Page_Load(object sender, ...
  • 为什么不用数据库存储图片

    千次阅读 2019-04-18 15:12:15
    首先需要知道数据库如何存储图片 BLOB 64K;MEDIUMBLOB(最大16M);LONGBLOB类型(4G)三种不同大小的类型。二进制格式的。 写入时并无格式之分,只是保存二进制数据,读取后和写入时的格式一样。 设计数据库表时...
  • 这两天需要在图片存储性能方面做一些实验,无非就是两种方法,一是将图片以BLOB格式存入数据库中,二是将图片路径存入数据库中,然后从数据库中提取出来。 实验数据是从1000张图片中遍历取出100张,样本比较小哈。...
  • 请教各位大神,图片数据库中以什么格式或者怎样处理能让其在读写时能够更加高效一些?
  • base64存进数据库的话,我们第一想到的是使用字符串,但是在数据库是用什么类型呢 最初使用varchar(255) 但是还是保存的时候还是会报一个异常 Caused by: ...
  • 因项目需要,图片类型的文件无法存储到本地磁盘中,必须以二进制的格式存储数据库中。以这样的方式进行读写操作时候,就遇到各种问题,下面分别进行问题展示,并列出解决方案: 问题一、图片数据库中的格式问题...
  • 上传图片以base64格式存储数据库

    千次阅读 2017-12-18 14:40:08
    JSP页面 ;" >温馨提示:附件大小不超过1M,附件格式为JPG、PNG、JPEG。 <div id="takePhotoUpId" class="weu
  • 图片存储数据库的基本思路:前端选取图片,将图片转换为base64格式存放于数组中,后续可用数组的split()方法,以#作为连接,将其转换为字符串存放到数据库 这样,需要从数据库获得图片时,只需将请求到的字符串...
  • 或者哪位大神有没有将bmp格式图片读取到之后存储到mysql数据库中??? BITMAPFILEHEADER fh; BITMAPINFOHEADER ih; int rows, cols; Mat showImg; ifstream src("E:\\Users\\wal\...
  • 在做网站用户登录的时候,需要完成用户选择头像图片上传到服务器,然后登录的时候显示对应头像解决方案:一、数据库存储图像路径,将图像上传达到WEB服务器存储。(这里不多说,很好实现) 二、直接将图片转换为...
  • 之前项目是用数据库的image格式保存图片,但是考虑到图片一旦很大的时候,客户端加载图片的速度就会变得非常慢,导致登录时间很长。因此必须改为用url的方式,将图片的url记录在数据库中,指向一个图片的虚拟存储...
  • java存储图片数据库

    2013-10-19 15:40:13
    1 mysql存储大容量的二进制文件的格式是blob,其实除了图片还可以存别的 2 要向数据库存储二进制的文件一定要把要存储的数据转换成二进制流 废话就不多说了,大家看看代码很容易明白,先来看一个app程序,当然...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,058
精华内容 423
关键字:

数据库图片存储格式