Blob数据类型的使用

部署运行你感兴趣的模型镜像

Blob数据类型的使用:  
  blob{200}   bl_var     //   定义一个初始大小为200字节blob  
  blob   bl_var     //   普通定义方法,零长度blob  
  bl_var   =   Blob(Space(200))     //   动态分配200个字节,实际上是分配了一个200字符的字符串,全部为空格(ASCII码20H),最后转换为blob。也就是开辟了一个200字节的内存区,内容都是20H,而不是00H。全部初始化为全零的变通方法:(DX有更直接方法吗?)  
  blob   bl_var  
  bl_var   =   Blob(Space(200))  
  for   i   =   1   to   Len(bl_var)  
      BlobEdit(bl_var,   i,   Char(0))  
  next  
  //   BlobEdit()用于修改一个blob变量指定位置的值,修改值可以是任何类型(转换到blob字节)。  
  但是有个奇特的地方,PB会把char看作string,当写入了一个非零的字符(char)时,字符串以零字符结束,因此实际上修改了blob变量的两个字节(一个是字符本身,一个是零字节),解决方法是Blob(some_char),因为用Blob来转换字符串时,只有有效字符被转换,结尾的零字符会被忽略。而Blob(Char(0))将会返回一个空值,因为PB把char(0)作为零长度的字符串处理。  
  当修改值超出blob变量的范围时,该次修改将不起作用!  
   
  //   对blob变量作逐字节处理的方法:  
  //   bl_source已经初始化,i是要处理的字节位置  
  blob{1}   bl_byte     //   声明单字节长度的blob  
  int   li_byte  
  bl_byte   =   BlobMid   (bl_source,   i,   1)     //   Extract   a   byte  
  li_byte   =   Asc(String(bl_byte))     //   转换到整型  
  ...   //   对li_byte的值作任意处理,处于0-255单字节取值范围内  
  //   字节内容处理后再放回去  
  if   li_byte   =   0   then  
      BlobEdit(bl_source,   i,   Char(0))     //   写入00H  
  else  
      BlobEdit(bl_source,   i,   Blob(Char(li_byte)))  
  end   if  
    

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

在数据库中使用Blob数据类型,不同场景和数据库有不同的使用方法: - **Hibernate中使用Blob数据类型**: - **pojo定义**:在pojo定义时,直接将相关属性定义成`private Blob file;`。 - **hbm映射**:hbm映射时,设置`type="blob"`。 - **数据库字段**:数据库字段采用blob类型。 - **写入操作**:写入时使用`Hibernate.createBlob(fis);`,其中`fis`为`FileInputStream`。 - **获取操作**:获取时直接将blob数据写出,`img`标签可直接将blob数据放入`src`下使用[^1]。 - **Oracle数据库写入Blob字段**:写入Blob字段和写入其它类型字段方式不同,因为Blob自身有一个cursor,必须先获得cursor才能进行写入操作。以下是一个示例代码,展示了如何向Oracle数据库的BLOB字段写入数据: ```java try { /* 查询BLOB对象并锁定 */ ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE"); while (rs.next()) { /* 取出此BLOB对象 */ oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL"); /* 向BLOB对象中写入数据 */ BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream()); BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile)); int c; while ((c=in.read())!=-1) { out.write(c); } in.close(); out.close(); } /* 正式提交 */ conn.commit(); } catch (Exception ex) { /* 出错回滚 */ conn.rollback(); throw ex; } ``` 这个代码示例实现了从文件读取数据并写入Oracle数据库的BLOB字段中,同时处理了异常和事务提交与回滚的情况[^3]。 - **使用BFile类型(以Oracle为例)**: 1. 以`sysdba`身份登录,在oracle数据库中建立一个目录别名,用于将文件定位指针映射到文件系统,例如`create DIRECTORY 'tmpdir' AS 'D:/tmp';`,其中`tmpdir`表示逻辑目录名,`'D:/tmp'`是实际目录,该目录oracle应该有读权限。 2. 根据需要授权,如`GRANT READ ON DIRECTORY tmpdir TO scott;`。 3. 以`scott`用户登录,建立一个含有`bfile`字段的表,如`create table bfiletest(id number(3),fname bfile);`。 4. 插入数据,使用`bfilename`来进行`bfile`字段的`insert`或者`update`操作,例如`INSERT INTO bfiletest VALUES(1,BFILENAME('TMPDIR','a.JPG'));`,这里插入的是一个指向`D:/tmp`的文件定位指针映射,不是文件本身[^4]。 - **数据库Blob类型转换为String**:可以通过以下代码将Blob类型转换为String: ```java String content = null; try { if(image != null){ InputStream is = image.getBinaryStream(); byte[] b = new byte[is.available()]; is.read(b, 0, b.length); content = new String(b); } System.out.println(content); } catch (IOException e) { e.printStackTrace(); } ``` 该代码通过获取Blob的二进制流,将其读取到字节数组中,再将字节数组转换为字符串[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值