用oracle的java存储过程实现BLOB字段的字符串读取
来源:互联网 发布:linux查看网络配置 编辑:程序博客网 时间:2024/06/05 04:20
原创于2009年07月24日,2009年10月22日迁移至此。
阅读了一个帖子“有没有可能写出比Oracle函数更快的外部存储过程”(http://www.itpub.net/thread-1117461-1-1.html)
突发灵感,加上原来有一个需求,需要从BLOB字段(本来就是字符型的内容)中直接读取成为字符串,需要java开发人员的支持,想了想与其求人不如求己,
oracle.sql.BLOB的相关文档参看(http://www.princeton.edu/~storacle/jdbc8_doc/oracle.sql.BLOB.html)
java能够调用Oracle的存储过程,反之oracle也能用java来开发外部存储过程,这样java和oracle的相互界限就已经不明确了。
当然关系型数据库最好做自己应该做的事情而不是大包大揽做所有的非数据库应该做的事情。
--开发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<BlobLength) //循环处理字符串转换,每次1024;Oracle字符串限制最大4k
{
bytes= BlobContent.getBytes(i,1024) ;
i=i+1024;
newStr = newStr+new String(bytes,"gb2312");
}
*/
newStr = 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中开发并调试通过,很有意思
当然通过oracle包也可以实现这样的功能,如:
select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(BLOBField)) from TableName;
所以还是不要发明同样的轮子
- 用oracle的java存储过程实现BLOB字段的字符串读取
- 用java和oracle实现BLOB字段的字符串读取【转】
- 用java和oracle实现BLOB字段的字符串读取【转】
- java中如何读取ORACLE中BLOB字段存储的图片
- 写入到blob字段的存储过程
- 更新blob字段的存储过程
- C#读取oracle的Blob字段
- c#读取Oracle的Blob字段
- java读取mysql数据库的blob字段和Oracle数据库的Blob字段的区别【读取properties文件】
- blob字段的读取
- java 读取Oracle的clob,blob转换为字符串
- 用vba插入字符串到Oracle的BLOB字段
- 使用JAVA读取ORACLE BLOB字段实现上传下载
- 使用存储过程读取Oracle中的clob字段的数据
- 更新用blob字段存储照片的Java代码
- 更新用blob字段存储照片的Java代码
- java读取oracle的存储过程
- java读取oracle的存储过程
- 测试
- JavaScript中的Button对象
- PI实时数据库管理员须知-4
- asp.net后台添加“网页自动刷新”
- read()系统调用的流程(转个贴)
- 用oracle的java存储过程实现BLOB字段的字符串读取
- unicode工程的CString数据发送与接收注意
- 给中国学生的信 -- 开复
- (转)使用 JSON 进行数据传输
- C++ Primer笔记(12) 类
- 成功人士必看的35个好习惯
- 图形用户界面—基本概念
- 关于DOCTYPE html PUBLIC
- 嵌入式系统中断服务子程序(ISR)