精华内容
下载资源
问答
  • Access数据库的BLOB 技术思路:首先利用AE接口获取VARIANT类型属性值,然后将这个值以文件流方式写到一个路径下文件中,然后再根据这个文件形成一个新COleVariant对象 IMemoryBlobStream2Ptr iMBS; ...

    ArcGIS的BLOB========>Access数据库的BLOB

                技术思路:首先利用AE接口获取VARIANT类型的属性值,然后将这个值以文件流的方式写到一个路径下的文件中,然后再根据这个文件形成一个新的COleVariant对象

                IMemoryBlobStream2Ptr iMBS;
                iMBS.CreateInstance(CLSID_MemoryBlobStream);
                IMemoryBlobStreamVariantPtr iMBSV = (IMemoryBlobStreamVariantPtr)iMBS;
                iMBSV=varFieldValue.punkVal;(varFieldValue为利用AE接口获取的VARIANT变量)
                IBlobStreamPtr bs;
                bs=iMBSV;

                bs->SaveToFile(g_strBLOBImport.AllocSysString());(以文件流的方式写入指定文件中)

                STATSTG tag;
                hr = bs->Stat(&tag, STATFLAG_DEFAULT);
                unsigned long size;
                bs->get_Size(&size);(获得文件流的大小)

                CFile file;
                CByteArray ba;
                if ((file.Open(g_strBLOBImport, CFile::modeRead|CFile::typeBinary)) == NULL) (以二进制的方式打开指定文件)
                    return NULL;
                else
                {
                    for (int j=0; j<size; j++)
                    {
                        file.LockRange(j,1);
                        BYTE b;
                        file.Read(&b, 1);
                        ba.Add(b);
                    }
                }
                file.Close();

                COleVariant* pVar2 = new COleVariant(ba);(形成新的COleVariant对象)

     

                另外:1.ArcGIS生成的BLOB字段的数据对象VARIANT的类型,即VARIANT::vt,是VT_UNKNOWN,所以在导出时要设置回去

                         2.在数据库插入BLOB字段,不能用SetValue,而要用AppendChunk()

     

    Access数据库的BLOB========>ArcGIS的BLOB

                        技术思路:首先将属性数据拷贝为BYTE类型的变量中,然后利用AE接口将该变量导入类型为IMemoryBlobStream2Ptr变量中,最后再创建VARIANT对象

                        unsigned long cBufLen = var.parray->rgsabound[0].cElements;

                        BYTE * ppBuf;
                        ppBuf = new BYTE[cBufLen];
                        if(ppBuf != NULL)
                        {
                             void* pArrayData;

                             SafeArrayAccessData(var.parray,&pArrayData);
                             memcpy(ppBuf, pArrayData, cBufLen);(拷贝数据)
                             SafeArrayUnaccessData(var.parray);
                        }

                        IMemoryBlobStream2Ptr iMBS;
                         iMBS.CreateInstance(CLSID_MemoryBlobStream);
                        iMBS->ImportFromMemory(ppBuf, cBufLen);(导入数据)
                        IMemoryBlobStreamVariantPtr iMBSV = (IMemoryBlobStreamVariantPtr)iMBS;

                        VARIANT TVar;
                        TVar.vt = VT_UNKNOWN;
                        TVar.punkVal = iMBSV;(生成新的VARIANT对象)

                        hr = pFeature->put_Value(i + 2, TVar); (插入数据)

     

    转载于:https://www.cnblogs.com/zhanglibo0626/archive/2008/10/09/1307494.html

    展开全文
  • 这次说一下Blob字段的出库,也就是读取Blob字段中存的数据,因为不知道Blob字段中存的数据(文件)时什么类型的,所以可以在存入数据库的时候,每一条数据对应的存上Blob中存入的文件的文件名(一定带上文件格式),...

    上一篇说了Blob字段的入库
    这次说一下Blob字段的出库,也就是读取Blob字段中存的数据,因为不知道Blob字段中存的数据(文件)时什么类型的,所以可以在存入数据库的时候,每一条数据对应的存上Blob中存入的文件的文件名(一定带上文件格式),下面的代码都是在这个条件下完成的,如果你的Blob字段不知道存的什么类型的文件,那么…
    首先要拿到你要获取的Blob所在的那条数据,就是一条查询语句,然后接收查询结果嘛,这就不用写了吧,我就略过了,不同的框架不同的写法,但是结果都是拿到一条含有Blob的数据:

    Test t = new Test();//new一个对象用来接收查询的数据
    // 初始化驱动包
    Class.forName("oracle.jdbc.driver.OracleDriver");
    // 根据数据库连接字符,名称,密码给conn赋值
    conn = DriverManager.getConnection("url", "user", "password");
    String sql = "select filename,blobvalue from test where id = '123456'";//假设这是拿到blob的sql
    st = (Statement) conn.createStatement(); // 创建用于执行静态sql语句的Statement对象
    rs = st.executeQuery(sql); // 执行查询的sql语句
    while (rs.next()) {
    	t.setFileName(rs.getString("filename"));//获取Blob字段存储的文件名和格式
    	t.setBlobValue(rs.getBlob("blobvalue"));//获取Blob字段的数据
    }
    String fileName = t.getFileName();//单独拿出来文件名,方便用
    BufferedInputStream bis = null;
    BufferedOutputStream bos = null;
    OutputStream fos = null;
    InputStream fis = null;
    try{
    	Blob blob = t.getBlobValue();
    	fis = blob.getBinaryStream();
        bis = new BufferedInputStream(fis);
        fos = response.getOutputStream();
        bos = new BufferedOutputStream(fos);
        setFileDownloadHeader(request,response, fileName);//这个单独写一个方法,这个是防止下载的文件名乱码用的
        int byteRead = 0;
        byte[] buffer = new byte[8192];
        while((byteRead=bis.read(buffer,0,8192))!=-1){
            bos.write(buffer,0,byteRead);
        }
        bos.flush();
        fis.close();
        bis.close();
        fos.close();
        bos.close();
    }catch(IOException e){
    	e.printStackTrace();
    }catch (SQLException e) {
    	e.printStackTrace();
    }finally{
    	fos.close();
    	fis.close();
    } 
    
    
    public static void setFileDownloadHeader(HttpServletRequest request,HttpServletResponse response, String fileName) {
       try {
           //中文文件名支持
           String encodedfileName = null;
           String agent = request.getHeader("USER-AGENT");
           
           if(null != agent && -1 != agent.indexOf("MSIE")){//IE
               encodedfileName = java.net.URLEncoder.encode(fileName,"UTF-8");
           }else if(null != agent && -1 != agent.indexOf("Mozilla")){
               encodedfileName = new String (fileName.getBytes("GBK"),"iso-8859-1");
           }else{
               encodedfileName = java.net.URLEncoder.encode(fileName,"UTF-8");
           }
           //下面提供两种写法,根据不同情况选择使用,一般下载使用第一种
           response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\"");//点击会提供对话框选择另存为
           //response.setHeader( “Content-Disposition “, “inline;filename= “+fliename)//通过IE浏览器直接选择相关应用程序插件打开
           //
       } catch (UnsupportedEncodingException e) {
           e.printStackTrace();
       }
    }
    
    

    好了,上面的代码就可以实现Blob字段的出库,效果就是点击下载,浏览器会弹出下载框, 出库比较简单,没有入库那么麻烦,文章纯手打,有错误的地方请谅解。
    原创:影公子 ——转载请注明原帖链接

    展开全文
  • 1.action中代码:  public void getImg(){  HttpServletRequest request = ... entity=.....//获取你自己需要展示图片实体,也可以直接获取存储图片的BLOB字段  if(null!=entity){  byte[] bDate=
    1.action中的代码:
      public void getImg(){
      HttpServletRequest request = contextPvd.getRequest();
            entity=.....//获取你自己需要展示图片的实体,也可以直接获取存储图片的BLOB字段
          if(null!=entity){
           byte[] bDate= entity.getPortTart();
           if(0<=bDate.length){
            HttpServletResponse response = ServletActionContext.getResponse();
            imgManager.flushImg( b, response);
              }
      }
    2.servce中的代码:
     public void flushJsonImg(StringBuffer json, byte[] b,HttpServletResponse response) {
        response.setContentType("image/*");
        OutputStream out;
     try {
          out = response.getOutputStream();
          out.write(b, 0, b.length);
          out.flush();
          out.close();
     } catch (IOException e) {
      e.printStackTrace();
         }
     }
    3.显示图片
     <img src="${ctx}/admin/Com_getImg.do?search_adUserId=${adUserId}"/>
    请求后面可以加参数,控制具体显示那个对象对应的图片。
    展开全文
  • 由于借鉴了其他获取Oracle数据库Blob方法,试了多次没有成功,自己磨了两个小时磨了出来,在这里记录下来,以便以后查阅! 这里使用SpringBoot搭建maven环境,只需将springboot包引入即可,并且数据库中需要...

    由于借鉴了其他获取Oracle数据库Blob方法,试了多次没有成功,自己磨了两个小时磨了出来,在这里记录下来,以便以后查阅!

    这里使用的SpringBoot搭建的maven环境,只需将springboot的包引入即可,并且数据库中需要创建一张测试表,里面有Blob的字段,这里我建的表叫test表,且里面有个blob字段叫ZP

    1.创建测试Mapper文件

    这里返回的值为Map<Object,Object> 类型,即查询的Blob字段放入到Object类型中

    @Mapper
    public interface TestMapper {
    	@Select("select zp from test")
    	public List<Map<Object,Object>> getList();
    }

    2.创建测试service接口文件与实现文件

    @Repository
    public interface TestService {
    	public List<Map<Object,Object>> getList();
    }
    
    @Repository
    public class TestServiceImpl implements TestService {
    	@Autowired
    	TestMapper testMapper;
    	public List<Map<Object, Object>> getList() {
    		return testMapper.getList();
    	}
    }
    

    3.blob转byte[]、Blob转文件、Blob转base64编码

      /**
    	 * 测试方法
    	 * @param args
    	 * @throws Exception
    	 */
    	public static void main(String[] args) throws Exception {
    	   SpringApplication.run(Application.class, args);
    	   List<Map<Object, Object>>  list = SpringUtils.getBean(TestService.class).getList();
    	   for (Map<Object, Object> map : list) {
    		   BLOB blob = (BLOB)map.get("ZP");  
    		   System.out.println(blobToBase64(blob));
    		   blobToPic(blob);
    	   }
    	}
    	
    	
    	/**
    	 * blob转base64
    	 * @param blob
    	 * @throws Exception
    	 */
    	public static String blobToBase64(Blob blob) throws Exception{
    		return Base64.encodeBase64String(blobToByte(blob));
    	}
    	
    	/**
    	 * blob转pic
    	 * @param blob
    	 * @throws Exception
    	 */
    	public static void blobToPic(Blob blob) throws Exception{
    		byte[] bt = blobToByte(blob);
    		FileImageOutputStream imageOutput = new FileImageOutputStream(new File("F:/a.png"));
    	    imageOutput.write(bt, 0, bt.length);
    	    imageOutput.close();
    	}
    	
    	/**
    	 * blob转byte
    	 * @param blob
    	 * @throws Exception
    	 */
    	public static byte[] blobToByte(Blob blob) throws Exception{
    		InputStream is = (InputStream) blob .getBinaryStream();  
    	    byte[] bs = new byte[1000];
    	    int len = -1;
    	    ByteArrayOutputStream os = new ByteArrayOutputStream(); 
    	    while((len=is.read(bs)) != -1){
    		   os.write(bs, 0, len);
    	    }
    	    byte[] bt = os.toByteArray();
    	    os.close();
    	    is.close();
    	    return bt;
    	}

     

     

     

     

     

     

     

    展开全文
  • 将图片以流形式存入到 blob类型的字段中: 第一步: 获取文件输入流 (获取方式有很多种) DiskFileItemFactory fac = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(fac); ...
  • 1.java代码: 1 /** 2 * 打印模板获取电子签名 3 * @param request 4 * @param resp 5 * @param id 6 * @return 7 * @throws Exception 8 */ 9 @RequestMapping...
  • 数据库blob二进制文件下载到本地 1、从数据库获取到二进制字段内容 2、通过浏览器响应下载到本地 var id = p_item.getValue("OBJ_ID"); var filename = p_item.getValue("REALNAME"); var content = p_item.getValue...
  • 可以通过使用BLOB和CLOB字段类型来完成:大致是先在数据中插入记录,然后再通过for update 语句将对象查询出来(这里有事务提交问题),最后通过oracle包的BLOB字段获取输出流,将对象写进数据库。  使用Mybatis...
  • //--这是关于聊天图片内容以clob/blob字段保存数据库,首先要区分发送内容是图片还是文字什么msgtype =‘0’是图片,msgtype =‘1’文字。 //监听查看更多记录 layim.on('chatlog', function (data, ul) { var...
  • String pPath = request.getRealPath("/");String sPath=pPath+"news//"; %> 从数据库中读取图片并生成对应文件 --> //获取生成图片物理路径Connection con=Db.getConn();Statement st
  • BLOB字段处理

    2021-04-24 23:12:43
    概要: Blob类型:是一个二进制类型,常用于存储大文本,图像 等等二进制数据, 在网页开发中我们经常遇到这样需求,需将富文本字符串转换为Blob数据类型,...2.从数据库获取相应值,将BLOG转换成String: if(gddk
  • 新手入门android,在开发一个应用,访问一个web服务器获取服务器端的数据,其中主要内容保存在oracle数据库的一个blob字段里,里面保存了中文和图片数据,现在要此字段的内容在android端通过访问web端来获取,web...
  • 必要提醒:当前总结是继Java实现下载BLOB字段文件之后总结,如有不解之处,请参考之。 核心代码 jdk提供了java.util.zip包,用于实现文件打包功能,但是对中文名文件没有很好支持。org.apache.too...
  • 数据库BLOB读写Java字段类型定义为byte[],数据库表的字段类型为BLOB,常用类型转换器是BlobTypeHandler批量更新配置&lt;!-- 配置默认执行类型是批量模式 --&gt; &lt;setting name="...
  • 在hibernate中对oracle的clob和blob字段的处理采用光标的方式来处理,其中隐含的深层含义是:对该类型字段的存取,hibernate维护了一个关联该字段的数据库的连接A,该连接和session的连接有可能不是同一个,因此问题...
  • servlet接收请求,spring工具类访问数据库及简化大字段内容获取。 虽然文章demo中是以sevlet为平台,想必在spring mvc中也有参考意义。 核心代码 响应设置和输出 1 public void service(ServletRequest ...
  • 出现这种问题解决办法有两种: 1.在JDBC中获取数据库连接后设置autoCommit为false: ...2.如果你是循环读取某一个BLOB字段,最好是每次都创建一个新的数据库连接,在循环中,这样就不会出这个错误了....
  • 以前都是将图片存储路径存在数据库中,这次学习了将图片以blob类型或image类型存储在数据库中,并从数据库获取图片显示到jsp中。 表名为:tmp(员工表) 字段:id (员工id,int类型),pic(员工照片,blob...
  • jdbcTemplate获取mysql的blob

    千次阅读 2016-09-29 10:24:56
    java使用jdbcTemplate操作mysql数据库,遇到blob字段,正常读取出来是blob地址,而不是blob内容。 下面采用2中方式读取blob内容: 1、以二进制数组形式读取blob,适用于文本数据
  • 需要将数据库中的blob字段,批量生成文件并保存在本地,并将文件路径输出 可能是因为版本的问题(我猜的)导致不能直接读取出blob类型字段的完整内容 这是kettle 中java 组件获取上一步组件传入数据的方式,不能直接...
  • 简单研究了一下BLOB/TEXT字段数据库性能影响,得到一个大概结论:(未验证) 无论MySQL还是MSSQL,都可以通过把BLOB/TEXT数据存储在行外方式提高性能 把BLOB/TEXT字段单独建表保存其实意义不大,增加...
  • 我们一般使用blob字段存贮照片或其他大文件,Blob分几种,一般可以根据文件大小确定,我这里存图片,使用是MediumBlob。 MediumBlob大小限制在16M以内。再往下就是64kBlob。往上是4GLongBlob。 1.表构建 ...
  • 在java中 查询一个表 图片字段blob类型) 判断该图片大小,如果大于100K,那么就把该图片处理成100K 我现在做到获取该图片 但是 处理图片大小遇到了问题 出现错误地方:src = javax.imageio....
  • 最近项目需要把oracle数据库中的数据导出几条...在查询到数据后使用rs.getMetaData,得到结果集的结构信息,不明白的同学可以在网上查找下,然后获取字段的列名和类型,判断是否是blob类型,如果是就用字节流写到文件中
  • mysql存储BLOB类型文件以及获取方式

    万次阅读 2020-08-05 09:51:32
    如何将文件内容存储到数据库中呢? 先了解一下mysql中一个数据类型:BLOB BLOB (binary large object)----二进制大对象,...在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。在数据库样子: ...
  • 通过文件选择器,选择图片文件并把图片文件 存入 数据库的 blob类型字段中  及直接从数据库中读取图片文件(Blob --> 图片)  步骤:  1、创建文件选择器,获取选择图片文件  //声明文件,表示要存入...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 137
精华内容 54
关键字:

数据库blob字段的获取