网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle:一条SQL实现将多行数据并.
.复杂应用环境监控ORACLE数据库性.
.在oracle9i正确转换时区.
.oracle安全可靠的复制.
.ORACLE表空间恢复方案.
.Oracle数据库技术(11).
.案例学习Oracle错误:ORA-29516.
.在 Oracle 中编写的树级代码分享.
.Re: 请问youngcow的FTP上DB2_win.
.新手上路:Oracle基础工具简介.
.实现高可用性设计的奥秘.
.数据库学习指南Oracle数据安全面.
.[Oracle]进程结构和内存结构的实.
.讲解exp时对密码中含“)”的处理.
.计算LMT表空间的大小该怎么建是最.
.Oracle 9i 在AIX 5L 上的安装、建.
.ORACLE常用傻瓜问题1000问(之三).
.SQL*NET 的加密问题.
.一个SQL的优化过程.
.ExactPapers Oracle 1Z0-121 200.

Oracle中Blob字段的写入处理(一)

发表日期:2008-2-9



  
Oracle中Blob字段的写入处理(一)

韦  伟

 

Oracle中的Bloc字段的处理较其他字段来说,会有一些非凡性。现就对在Java和pl/sql下,Blob字段的处理和大家做一些交流。

下面,简单介绍一下Blob在以下两种环境中的写入处理,

u      java环境

u      PL/SQL环境

 

 

一、java环境

1、 Blob的插入操作

1)       插入一空的Blob。

2)       更新该纪录的Blob。

 

例子:

比如表结构如下:

       CREATE TABLE Student (

              Name VARCHAR2(30),

              Age   Int,

              Picture    Blob);

i.插入一空的Blob。

String command=”INSERT INTO Student VALUES(?,?,?)”;

Connection conn=null;

PreparedStatement ps=null;

try

{

   conn=….;

ps=conn. prepareStatement(command);

ps.setString(1,”ZhangSan”);

ps.setInt(2,20);

ps.setBlob(3, BLOB.empty_lob());

ps.executeUpdate();



ii.更新该纪录

 



byte[] data=null;

Connection conn=null;

Try

{

  data=…  //图片信息

   conn=..

   ByteArrayInputStream in=new ByteArrayInputStream(data);

  updateBlob(in, conn, “Student”,”Picture”,”Name”,”zhangsan”);

   …

   …

 

 

public static void updateBlob(  InputStream instream,

                          Connection conn,

String table,

                        String blobColumn,

        String keyColumn,

                          String keyValue)   

throws SQLException, IOException

    {

      Statement stmt = null;

      OracleResultSet rs = null;

      BLOB blob = null;

 

      boolean oldAutoCommit = conn.getAutoCommit();

      StringBuffer sqlBuffer = new StringBuffer();

 

      try {

          conn.setAutoCommit(false);

 

          sqlBuffer.append("select ");

          sqlBuffer.append(blobColumn);

          sqlBuffer.append(" from ");

          sqlBuffer.append(table);

          sqlBuffer.append(" where ");

          sqlBuffer.append(keyColumn);

          sqlBuffer.append("='");

          sqlBuffer.append(keyValue);

                 //注重这里的”for update”

          sqlBuffer.append("' for update ");

 

          stmt = conn.createStatement();

          rs = (OracleResultSet) stmt.executeQuery(sqlBuffer.toString());

 

          if (!rs.next())

          {

              rs.close();

              stmt.close();

              throw new IllegalArgumentException(

                  "no record found for keyValue: '" + keyValue + "'");

          }

          blob = rs.getBLOB(1);

          OutputStream outstream = blob.getBinaryOutputStream();

          int bufferSize = blob.getChunkSize();

          byte[] buffer = new byte[bufferSize];

          int bytesRead = -1;

          while ((bytesRead = instream.read(buffer)) != -1)

          {

              outstream.write(buffer, 0, bytesRead);

          }

          instream.close();

          outstream.close();

          rs.close();

          stmt.close();

      }

      catch (SQLException e)

      {

          throw e;

      }

      catch (IOException e)

      {

          throw e;

      }

 

      finally {

          conn.setAutoCommit(oldAutoCommit);

      }

  }

 

二、PL/SQL下

(例子表结构如一所示)

i.插入一空的Blob。


       …

       declare

              bufferBlob BLOB;

              data        RAW(…)



       INSERT  INTO Student VALUES(‘zhangsan’, 20 , empty_blob() );

       …

 

ii.更新该纪录的Blob。

       …

       SELECT Picture INTO bufferBlob FROM Student WHERE Name=’zhangsan’ FOR UPDATE;

       DBMS_LOB.OPEN(bufferBlob , dbms_lob.lob_readwrite);

       dbms_lob.write(bufferBlob , utl_raw.length(data) , data);

       …

(待续)
上一篇:用Oracle的热备份重建数据库 人气:635
下一篇:Oracle数据库文件大挪移 人气:572
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐