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

OracleBlob字段的写入处理(一)

 

 

Oracle中的Bloc字段的处理较其他字段来说,会有一些特殊性。现就对在javapl/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);

      

(待续)

已标记关键词 清除标记
相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐一共包含2门MySQL数据库必学的核心课程(共98课时)   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1)平时只接触了语言基础,并未学习任何数据库知识的人;  2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3)想修炼更好的MySQL内功,工作遇到高并发场景可以游刃有余; 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程进行学习; 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页