Oracle实现BLOB字段的相关文档参看(http://www.princeton.edu/~storacle/jdbc8_doc/oracle.sql.BLOB.html)
Java能够调用Oracle的存储过程,反之Oracle也能用Java来开发外部存储过程,这样Java和oracle的相互界限就已经不明确了。Oracle实现BLOB字段的字符串读取也就非常容易了。
当然关系型数据库***做自己应该做的事情而不是大包大揽做所有的非数据库应该做的事情。
--开发Java类
- create or replace and compile Java source named BLOBObject as
- package MyOracle.BLOB; --自己定义的package
- import Java.io.*; --外部引用到的Java包
- import oracle.sql.*;
- public class BLOBObject
- {
- public static String ConvertBLOBtoString(oracle.sql.BLOB BlobContent)
- {
- byte[] msgContent= BlobContent.getBytes(); //BLOB转换为字节数组
- byte[] bytes; //BLOB临时存储字节数组
- String newStr = ""; //返回字符串
- int i=1; //循环变量
- long BlobLength; //BLOB字段长度
- try
- {
- BlobLength=BlobContent.length(); //获取BLOB长度
- if (msgContent == null || BlobLength==0) //如果为空,返回空值
- {
- return "";
- }
- else //处理BLOB为字符串
- {
- /*
- while(i
- {
- bytes= BlobContent.getBytes(i,1024) ;
- ii=i+1024;
- newStrnewStr = newStr+new String(bytes,"gb2312";
- }
- */
- newnewStr = new String(BlobContent.getBytes(1,900),"gb2312"+"...."; //简化处理,只取前900字节
- return newStr;
- }
- }
- catch(Exception e) //oracle异常捕获
- {
- e.printStackTrace();
- }
- return newStr;
- }
- }
--然后在Oracle中把这个类导入成为一个函数,执行命令
- create or replace function ConvertBLOB(blobObject BLOB)
- return varchar2
- as language Java name
- 'MyOracle.BLOB.BLOBObject.ConvertBLOBtoString(oracle.sql.BLOB) return Java.lang.String';
--执行相应的操作
- select ConvertBLOB(BLOBField),dbms_lob.getlength(BLOBField),BLOBFieldfrom TableName
以上代码均在PL/SQL developer中开发并调试通过,Java和Oracle实现BLOB字段的字符串读取很有意思。
【编辑推荐】