彻底实现BLOB字段保存到磁盘文件的方法,内有实例

本文详细介绍了使用Java程序将数据库中的BLOB类型数据导出至磁盘文件的过程,包括创建JAVA程序源、存储过程及权限授权等步骤,并通过测试验证了方法的有效性。
经过数个不眠之夜,终于得出BLOB保存至磁盘文件的方法,以下代码经过测试成功。请大家见教!
注意:各阶段使用的数据库用户名不一定相同。
--==============================
--创建JAVA程序源
--==============================
CREATE OR REPLACE JAVA SOURCE NAMED "BlobHandler" AS
import java.lang.*;
import java.sql.*;
import oracle.sql.*;
import java.io.*;

public class BlobHandler
{
  
  public static void ExportBlob(String myFile, BLOB myBlob) throws Exception
  {
    // Bind the image object to the database object
    // Open streams for the output file and the blob
    File binaryFile = new File(myFile);
    FileOutputStream outStream = new FileOutputStream(binaryFile);
    InputStream inStream = myBlob.getBinaryStream();

    // Get the optimum buffer size and use this to create the read/write buffer
    int size = myBlob.getBufferSize();
    byte[] buffer = new byte[size];
    int length = -1;

    // Transfer the data
    while ((length = inStream.read(buffer)) != -1)
    {
      outStream.write(buffer, 0, length);
      outStream.flush();
    }

    // Close everything down
    inStream.close();
    outStream.close();
  } 

};
/

ALTER java source "BlobHandler" compile;
show errors java source "BlobHandler"
--=======================================
--创建BLOB保存为文件的存储过程
--=======================================
CREATE OR REPLACE PROCEDURE ExportBlob (p_file  IN  VARCHAR2,
                                        p_blob  IN  BLOB)
AS LANGUAGE JAVA 
NAME 'BlobHandler.ExportBlob(java.lang.String, oracle.sql.BLOB)';
/
-==-======================================================
--授权数据库用户可以保存文件至磁盘,应以DBA身份登录
--注:SCHEMA-NAME应填写数据库用户名,应注意大写字母
--========================================================
EXEC Dbms_Java.Grant_Permission( -
'SCHEMA-NAME', -  
'java.io.FilePermission', -
'<<ALL FILES>>', -
'read ,write, execute, delete');
--=======================================
--测试
--=======================================
--创建数据库(测试)
CREATE TABLE tab1 (col1 BLOB);
INSERT INTO tab1 VALUES(empty_blob());
COMMIT;                                
--执行存储过程,生成磁盘文件
DECLARE
  v_blob BLOB;
BEGIN
  SELECT col1
  INTO   v_blob
  FROM   tab1;
  
  ExportBlob('c:\MyBlob',v_blob);
END;
/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值