`

向oracle 读,写文件Blob 读,写大文本Clob

阅读更多
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

/**
*
* @author semovy 测试向oracle 读,写文件Blob 读,写大文本Clob
*/
public class OracleBlobTest {

private String driver = "oracle.jdbc.driver.OracleDriver";

private String url = "jdbc:oracle:thin:@localhost:1521:teckotooling";

private String user = "scott";

private String pwd = "tiger";

public OracleBlobTest() {
}

public static void main(String[] args) {
  OracleBlobTest obt = new OracleBlobTest();
  obt.writeBlob();
  obt.readBlob();
  obt.writeClob();
  obt.readClob();
}

/**
  * 读二进制文件
  *
  */
private void readBlob() {
  Connection conn = null;
  try {
   conn = getConnection();
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("select * from test where id=1");
   byte[] buffer = new byte[1024];
   OutputStream out = new FileOutputStream("d:/360安全卫士定1.exe");
   int tempLen = 0;
   int amount = 0;
   if (rs.next()) {
    Blob blob = rs.getBlob("BINARYCONTENT");
    InputStream in = blob.getBinaryStream();
    while ((tempLen = in.read(buffer)) != -1) {
     out.write(buffer, 0, tempLen);
     amount += tempLen;
     System.out.println("已经读出并写:" + amount + " 字节");
    }
    System.out.println("已经读出并写:完成");
    out.flush();
    out.close();
    in.close();
    rs.close();
    stmt.close();
   }
  } catch (ClassNotFoundException e) {
   System.out.println(e.getLocalizedMessage());
  } catch (SQLException e) {
   System.out.println(e.getLocalizedMessage());
  } catch (IOException e) {
   System.out.println(e.getLocalizedMessage());
  } finally {
   try {
    if (conn != null)
     conn.close();
   } catch (SQLException e) {
    System.out.println(e.getLocalizedMessage());
   }
  }
}

/**
  * 写二进制文件
  *
  */
private void writeBlob() {
  Connection conn = null;
  try {
   conn = getConnection();
   conn.setAutoCommit(false);
   String sql = null;
   Statement stmt = conn.createStatement();
   sql = "delete from test where id=1";
   stmt.executeUpdate(sql);
   sql = "insert into test(1,BINARYCONTENT,CLOBCONTENT) values(1,empty_blob(),empty_clob())";
   stmt.executeUpdate(sql);
   ResultSet rs = stmt.executeQuery("select * from test where id=1");
   if (rs.next()) {
    Blob blob = rs.getBlob("BINARYCONTENT");
    OutputStream out = ((oracle.sql.BLOB) blob).setBinaryStream(0);// 从0开始,否则写出的文件有差错
    int bufferSize = ((oracle.sql.BLOB) blob).getBufferSize();
    System.out.println("bufferSize :" + bufferSize);
    BufferedInputStream in = new BufferedInputStream(
      new FileInputStream("d:/360安全卫士定.exe"), bufferSize);
    byte[] b = new byte[bufferSize];
    int count = in.read(b, 0, bufferSize);
    int amount = 0;
    while (count != -1) {
     out.write(b, 0, count);
     amount += count;
     System.out.println("处理了 " + amount + " 字节");
     count = in.read(b, 0, bufferSize);
     System.out.println("处理了 " + amount + " 字节,成功");
    }
    out.close();
    out = null;
    in.close();
    conn.commit();
   }

  } catch (ClassNotFoundException e) {
   System.out.println(e.getLocalizedMessage());
  } catch (SQLException e) {
   try {
    conn.rollback();
   } catch (SQLException e1) {
    System.out.println(e1.getLocalizedMessage());
   }
   System.out.println(e.getLocalizedMessage());
  } catch (IOException e) {
   System.out.println(e.getLocalizedMessage());
  } finally {
   try {
    if (conn != null)
     conn.close();
   } catch (SQLException e) {
    System.out.println(e.getLocalizedMessage());
   }
  }
}

/**
  * 读大文本
  *
  */
private void readClob() {
  Connection conn = null;
  try {
   conn = getConnection();
   Statement stmt = conn.createStatement();
   ResultSet rs = stmt.executeQuery("select * from test where id=2");
   String tempStr = null;
   if (rs.next()) {
    Clob clob = rs.getClob("CLOBCONTENT");
    if (clob != null) {
     Reader in = clob.getCharacterStream();
     BufferedReader br = new BufferedReader(in);
     System.out.println("开始读....");
     while ((tempStr = br.readLine()) != null) {
      System.out.println(tempStr);
     }
     System.out.println("读完成....");
     in.close();
    }
    rs.close();
    stmt.close();
   }
  } catch (ClassNotFoundException e) {
   System.out.println(e.getLocalizedMessage());
  } catch (SQLException e) {
   System.out.println(e.getLocalizedMessage());
  } catch (IOException e) {
   System.out.println(e.getLocalizedMessage());
  } finally {
   try {
    if (conn != null)
     conn.close();
   } catch (SQLException e) {
    System.out.println(e.getLocalizedMessage());
   }
  }
}

/**
  * 写大文本
  *
  */
private void writeClob() {
  Connection conn = null;
  try {
   conn = getConnection();
   conn.setAutoCommit(false);
   String sql = null;
   Statement stmt = conn.createStatement();
   sql = "delete from test where id=2";
   stmt.executeUpdate(sql);
   sql = "insert into test values(2,empty_blob(),empty_clob())";
   stmt.executeUpdate(sql);
   ResultSet rs = stmt.executeQuery("select * from test where id=2");
   if (rs.next()) {
    Clob clob = rs.getClob("CLOBCONTENT");
    PrintWriter out = new PrintWriter(new BufferedWriter(
      ((oracle.sql.CLOB) clob).setCharacterStream(0)));
    BufferedReader in = new BufferedReader(new InputStreamReader(
      new FileInputStream(
        "d:/在北大校园BBS引起轰动的一篇文章请热爱祖国的人转发!!!!.mht")));
    String str = null;
    System.out.println("开始写...");
    while ((str = in.readLine()) != null) {
     out.println(str);
     System.out.println(str);
    }
    in.close();
    out.close();
    rs.close();
    conn.commit();
   }

  } catch (ClassNotFoundException e) {
   System.out.println(e.getLocalizedMessage());
  } catch (SQLException e) {
   try {
    conn.rollback();
   } catch (SQLException e1) {
    System.out.println(e1.getLocalizedMessage());
   }
   System.out.println(e.getLocalizedMessage());
  } catch (IOException e) {
   System.out.println(e.getLocalizedMessage());
  } finally {
   try {
    if (conn != null)
     conn.close();
   } catch (SQLException e) {
    System.out.println(e.getLocalizedMessage());
   }
  }
}

private Connection getConnection() throws ClassNotFoundException,
   SQLException {
  Class.forName(driver);
  return DriverManager.getConnection(url, user, pwd);
}

/**
  *
  * @param rs
  * @throws SQLException
  */
private void displayResultSet(ResultSet rs) throws SQLException {
  ResultSetMetaData rsmd = rs.getMetaData();
  int colnum = rsmd.getColumnCount();
  while (rs.next()) {
   for (int i = 0; i < colnum; i++) {
    if (i == colnum - 1)
     System.out.print(rsmd.getColumnLabel(i + 1) + ": "
       + rs.getObject(i + 1));
    else
     System.out.print(rsmd.getColumnLabel(i + 1) + ": "
       + rs.getObject(i + 1) + " , ");
   }
   System.out.println();
  }
}
}


分享到:
评论

相关推荐

    sql server中的image类型的数据导出到oracle的clob字段中

    我们使用了 Java 语言和 JDBC 驱动程序来实现数据的导出,并将 Image 类型数据写到文件中,然后将文件中的数据读取出来,并将其设置到 Oracle 的 CLOB 字段中。这种方法可以帮助我们实现不同数据库管理系统之间的...

    oracle中读写blob字段的问题解析

    LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对像(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图像、影音等)。而CLOB,即字符型大型对像(Character Large Object),则与字符集相关,适于...

    spring+hibernate操作oracle的clob字段

    J2EE开发中,经常会遇到存储大文本的文字信息,而oracle数据库的vachar字段最大能存储4000个字节,存储更大的信息必须使用clob或blob字段,本文档就是针对j2ee开发中对colb字段操作的实现。

    Oracle P/L SQL实现文件压缩、解压功能

    Oracle P/L SQL实现文件压缩、解压功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 Create or Replace Package UTL_ZIP AUTHID CURRENT_USER as Type File_List is Table of Clob; -...

    深入浅析mybatis oracle BLOB类型字段保存与读取

     BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写。其中BLOB是用来存储大量二进制数据的;CLOB用来存储大量文本数据。BLOB通常用来保存...

    Oracle 插入超4000字节的CLOB字段的处理方法

    在通过拼组sql语句来实现... 下面就此问题的解决办法,做一下小结: 我们可以通过创建单独的OracleCommand来进行指定的插入,即可获得成功,这里仅介绍插入clob类型的数据,blob与此类似,这里就不介绍了,下面介绍两

    oracle数据库修复

    支持10g及以上的大文件(BigFile)表空间 全面支持64位系统,支持超过4G大小的数据文件。 支持复制操作系统命令不能复制的坏文件 支持同一个库中不同块大小的数据文件。 支持多种字符集之间的转换,能够正确的转换...

    oracle基本数据类型

    * blob:大型对象,用于保存较大的图形文件或带格式的文本文件,最大长度限制是 4GB。 * clob:大型对象,用于保存较大的文本文件,最大长度限制是 4GB。 * nclob:大型对象,用于保存较大的 Unicode 文本文件,最大...

    Oracle数据库恢复工具Oracle Database Unloader(ODU)3.09

    支持10g及以上的大文件(BigFile)表空间 列出表的分区和子分区 支持表被truncate后的数据恢复 支持表被drop后的数据恢复 支持压缩表 支持在没有SYSTEM表空间和数据字典损坏的情况下恢复数据,在没有数据字典可用...

    赤兔Oracle数据库恢复软件 v11.6.zip

    23.支持10g及以上的大文件(BigFile)表空间 24.全面支持64位系统,支持超过4G大小的数据文件。 25.支持复制操作系统命令不能复制的坏文件 26.支持同一个库中不同块大小的数据文件。 27.支持多种字符集之间的转换...

    ssh对lob完美处理

    java web 对clob大文本 blob图像处理 这是一个完整的例子,整合了ckeidtor,servlet直接显示数据库blob图片, 注意oracle驱动ojdbc14.jar,如果是其他驱动例如ojdbc14_*g都是不可以的。 表结构看hbm.xml配置文件 ...

    PRM-DUL Oracle(数据库恢复工具) v4.1.zip

    》》支持10g及以上的大文件(BigFile)表空间 》》支持同一个库中不同块大小的数据文件 》》以纯文本导出时,能够自动生成建表的SQL语句和SQL*Loader导入所需的control文件 PRM-DUL Oracle(数据库恢复工具) v4.1...

    Oracle8i_9i数据库基础

    §1.5.8 GET将命令文件读到缓冲区 35 §1.5.9 SPOOL将信息记录到文件中 36 §1.5.10 再运行当前缓冲区的命令 36 §1.6 常用数据字典简介 37 §1.7 ORACLE数据类型 38 §1.8 SQL 语句基础 44 §1.8.1 SQL语句所用符号...

    MySQL存储文本和图片的方法

    Oracle中大文本数据类型 Clob 长文本类型 (MySQL中不支持,使用的是text) Blob 二进制类型 MySQL数据库 Text 长文本类型 TINYTEXT: 256 bytes TEXT: 65,535 bytes =&gt; ~64kb MEDIUMTEXT: 16,777,215 bytes =&gt; ...

    基础电子中的在Oracle中存储与管理大对象数据类型

    一、Oracle数据库支持的大对象数据类型。 在Oracle数据库中为了更好的管理大容量的数据,专门开发了一些对应的大对象数据类型。具体的来说,有如下几种: 一是BLOB数据类型。它是用来存储可变长度的二进制数据。由于...

    Ora2PgDump:Oracle 到 PostgreSQL 转储

    Oracle 到 PostgreSQL 转储 此实用程序来自需要以合理的速度将 Oracle 数据转换为 PostgreSQL 数据。... CLOB -&gt; 文本 BLOB -&gt; bytea 类型/对象 -&gt; 不支持 集合 -&gt; 不支持(暂时) 如您所见,此实用程

    ob9数据库查看工具中文版.rar

    有关数据修改,LONG, LONG RAW, BLOB,CLOB的数据类型全都可以对应。 因为能马上显示输入的SQL语句的执行计划,所以可以一边确认输出结果和执行计划,一边创建出高效的SQL语句。可以实现从资源浏览器的拖放功能,...

    Oracle表的创建和管理

    clob:大文本数据,最多可以保存4G的文字 blob:二进制数据,可以保存最大4G数据 创建数据表 create table 表名称( 列名称 类型 [DEFAULT 默认值], 列名称 类型 [DEFAULT 默认值], 列名称 类型 [DEFAULT 默认值],...

    myoradump:MyOraDump 是一个用于从 Oracle 数据库导出数据的工具-开源

    MyOraDump 是一个程序,它将存储在大多数基本 oracle 类型中的 oracle 数据导出为文本文件,例如可以用于导入其他数据库,例如 MariaDB 和 MySQL。 程序使用OCI用C语言编写,支持数组获取,性能好。 此外还支持 BLOB...

    数据库基础

    §1.5.8 GET将命令文件读到缓冲区 35 §1.5.9 SPOOL将信息记录到文件中 36 §1.5.10 再运行当前缓冲区的命令 36 §1.6 常用数据字典简介 37 §1.7 ORACLE数据类型 38 §1.8 SQL 语句基础 44 §1.8.1 SQL语句所用符号...

Global site tag (gtag.js) - Google Analytics