关于Oracle9i中BLOB类型的操作

博客围绕Oracle9i中BLOB类型的操作展开。因JDBC2.0未完全实现对BLOB操作,需用Oracle扩展包。详细介绍了BLOB的写操作,包括Java操作和ORACLE存储过程;也阐述了读操作,同样涵盖ORACLE存储过程和Java操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于Oracle9iBLOB类型的操作

因为JDBC2.0没有完全实现对BLOB的操作,所以在读写Oracle中的BLOB类型的数据时必须使用Oracle的扩展包(classes12.jar)。

1.BLOB写操作

11 BLOBjava操作

      ............

        //调用写BLOB的存储过程

       String sql ="{call INSERT_BLOB(?)} ";

        //取得数据库连接

       Connection conn = dao.createCoon();

       CallableStatement proc = conn.prepareCall(sql);

        //设置字节数组

       proc.setBytes(1, blob);

        //执行存储过程

       proc.execute();

        //释放连接

       proc.close();

       conn.close();

      ............

 

12 BLOBORACLE存储过程

PROCEDURE INSERT_BLOB

  (BLOBDATA IN BLOB_TABLE_XX%TYPE)   --BLOB

AS

lobd  blob;

BEGIN

  SET TRANSACTION NAME 'insertblob';

  --BLOB_TABLE_XX表内的BLOB_ROW_XX插入空的BLOB

  INSERT INTO BLOB_TABLE_XX (BLOB_ROW_XX) VALUES (EMPTY_BLOB());

  --定位刚插入的BLOB

  SELECT SERVICE_IMG INTO lobd FROM BLOB_TABLE_XX WHERE XXX = XXX FOR UPDATE;

  --将内容写进刚插入的BLOB

  dbms_lob.write(lobd, utl_raw.length(BLOBDATA),1, BLOBDATA);

  --事务提交

  COMMIT;

  EXCEPTION

   WHEN OTHERS THEN

      BEGIN

      ROLLBACK;--出错后进行事务回滚

      END;

END;

 

2.BLOB读操作

21 BLOBORACLE存储过程

create or replace package body BLOB_PKG_XXX is

 

  TYPE CURSORTYPE IS REF CURSOR;

 

FUNCTION QUERY_BLOB 

   RETURN BLOB_PKG_XXX.CURSORTYPE

AS

  L_CURSOR BLOB_PKG_XXX.CURSORTYPE

BEGIN

  OPEN L_CURSOR FOR SELECT BLOB_ROW_XX

                      FROM BLOB_TABLE_XX

                     WHERE XXX = XXX ;

  RETURN L_CURSOR;

 

END;

 

END BLOB_PKG_XXX;

22 BLOBjava操作

       /**

        * Method getBlobBytes.BLOB内的内容读出并存入一个字节数组中

        * @param blob

        * @return byte[]

        * @throws SQLException

        * @throws IOException

        */

       public byte[] getBlobBytes(BLOB blob) throws SQLException, IOException {

              //取得BLOBIO

BufferedInputStream ins =

                     new BufferedInputStream(blob.getBinaryStream());

        //取得BLOB的长度

              int bufferSize = (int) blob.length();

              //建立字节缓存

byte[] bt = new byte[bufferSize];

//BLOB内容写入缓存

              ins.read(bt, 0, bufferSize);

              return bt;

       }

 

............

    try {

       String sql =  "{? = call BLOB_PKG_XXX.QUERY_BLOB()} ";

 

       //取得数据库连接

       Connection conn = dao.createCoon();

       CallableStatement proc = conn.prepareCall(sql);

        //设置返回对象类型为结果集

       proc.registerOutParameter(1, OracleTypes.CURSOR);

        //执行存储过程

       proc.execute();

        //获得结果集

       ResultSet rset = (ResultSet) proc.getObject(1);

       while (rset.next()) {

            //获得结果集中的BLOB对象

           BLOB blob = (BLOB) rset.getBlob(BLOB_ROW_XX);

           byte[] bt = dao.getBlobBytes(blob);

       }

//释放连接     

       proc.close();

       conn.close();

    } catch (NamingException e) {

       e.printStackTrace();

    } catch (SQLException e) {

       e.printStackTrace();

    } catch (Exception e) {

       e.printStackTrace();

    }

............

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值