⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clobtools.java

📁 Oracle 10g数据库Java开发 源码
💻 JAVA
字号:
package Information;

import java.sql.*;
import java.io.*;
import oracle.sql.*;
import comm.*;

public class ClobTools {
  public ClobTools() {}
	// 将信息内容strIn写入表tableName中条件为condition的记录的字段名为clobName的Clob字段
  public static void writeClob(String tableName, String clobName, String strIn,String condition) 
	  throws Exception, IOException,ClassNotFoundException {
	// 定义数据库连接对象
    DBOper dbOper = new DBOper();
    Connection conn = null;
	// 取得连接对象
    conn = dbOper.getConnection();
    try {
		// 如果联接对象为null,则重新建立联接,并取得连接对象
      if (conn == null)
        dbOper.connectDB();
      conn = dbOper.getConnection();
    }
    catch (Exception e) {
      System.err.println("Exception in ClobTools.writeClob:" + e);
      e.printStackTrace();
      throw new Exception("ClobTools写错误1!");
    }
	// 定义Oracle包Clob对象,这里必须使用Oracle包的方法,不能使用java.sql提供的方法
    oracle.sql.CLOB clob = null;
	// 因为其它字段已经存在内容,则使用更新语句
	// 必须先在指定Clob字段中放入空值empty_clob()
    String sql1 = "update " + tableName + " set " + clobName +"=empty_clob() where " + condition;
    // 设置不自动提交
    conn.setAutoCommit(false);
	// 执行更新操作
    dbOper.getResultSet(sql1);
    // 找到刚刚写入空值的CLob字段来更新
    String sql2 = "select " + clobName + " from " + tableName + " where " +condition + " for update";
	// 执行操作
    ResultSet rs = dbOper.getResultSet(sql2);
	// 执行更新Clob字段操作,将信息内容放入Clob字段
    if (rs.next()) {
      try {
		  // 将Clob字段的结果转换为Oracle指定的格式
        clob = (oracle.sql.CLOB) rs.getClob(clobName);
		// 读取Clob字段的字符输出流到write对象
        Writer writer = clob.getCharacterOutputStream();
		//定义StringReader对象,初始值为strIn
        StringReader strRead = new StringReader(strIn);
		//定义每次写入数据数组,长度为1024(1KB)
        char[] b = new char[1024];
        int len = 0;
		//从strRead对象中读取数据到数组b,然后写入write对象
        while ( (len = strRead.read(b)) != -1) {
		  //通过writer将b数组中的数据写入数据库的clob字段
          writer.write(b, 0, len);
        }
		//关闭对象,释放资源
        strRead.close();
        writer.close();
        rs.close();
		//提交
        conn.commit();
      }
	  //如果出错,则抛出异常
      catch (Exception e) {
        System.err.println("Exception in ClobTools.writeClob:" + e);
        e.printStackTrace();
        conn.rollback();
        conn.setAutoCommit(true);
        throw new Exception("ClobTools写错误2!");
      }
    }
	//关闭数据库连接
    dbOper.close();
  }

	// 从Clob字段中读取数据
  public static String readClob(String tableName, String clobName,String condition) 
	  throws Exception,SQLException, ClassNotFoundException {
 	// 定义数据库连接对象
    DBOper dbOper = new DBOper();
    try {
 	  // 取得连接对象
      if (dbOper.getConnection() == null)
        dbOper.connectDB();
    }
    catch (Exception e) {
      System.err.println("Exception in ClobTools.writeClob:" + e);
      e.printStackTrace();
      throw new Exception("ClobTools读错误1!");
    }
	// 设置输出字符串对象
    String strOut = null;
	// 设置java的Clob对象
    java.sql.Clob clob1 = null;
	// 根据条件设置查询语句
    String sql2 = "select " + clobName + " from " + tableName + " where " +  condition;
	// 执行查询操作
    ResultSet rs1 = dbOper.getResultSet(sql2);
	// 如果存在这个记录,则取出其值
    if (rs1.next())
      clob1 = rs1.getClob(1);
	//如果字段值为null,则返回
    if (clob1 == null) {
      dbOper.close();
      return null;
    }
    else {
	  // 如果Clob字段值不为空,则从clob字段中读取字符流到reader对象
      Reader reader = clob1.getCharacterStream();
	  // 分配新字符串存储空间
      StringBuffer strBuf = new StringBuffer();
      int len = 0;
	  // 定义字符数组,大小为1024(1KB)
      char[] b = new char[1024];
	 // 从reader对象中读取数据到数组b,并追加到strBuf对象
      while ( (len = reader.read(b)) != -1) {
        strBuf.append(b, 0, len);
      }
	  //创建新的String对象strOut,初始值为strBuf
      strOut = new String(strBuf);
    }
	//关闭对象,释放资源
    rs1.close();
    dbOper.close();
	//返回strOut,其中包含指定的clob字段的值
    return strOut;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -