`
xiaotian_ls
  • 浏览: 308051 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JDBC对CLOB的增修查

 
阅读更多

package com.yysoft.a.test;


import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.yysoft.util.Debug;
import com.yysoft.util.Library;

import oracle.jdbc.driver.OracleTypes;
import oracle.sql.CLOB;

public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  updateClob();
  getOtherClob();
 }
 
 public static void addClob(){
  try {
   String content="AAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCC";
   char[] cc=content.toCharArray();
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@10.99.1.114:1521:orcl","e3baoan","e3baoan");
   //手动提交
   conn.setAutoCommit(false);
   /* 以下表cjhtest中的cjhcontent字段时CLOB类型的 */
   //插入一条数据,注意CLOB字段,需要先插入一个空的clob类型 empty_clob(),然后再单独更新clob字段
   String sql = "insert into cjhtest(cjhid,cjhcontent) values(?,empty_clob())";
   PreparedStatement pstmt=conn.prepareStatement(sql);
   pstmt.setInt(1, 1);
   int i1=pstmt.executeUpdate();
   conn.commit();
   pstmt=null;
   if(i1>0){
    System.out.println("插入成功");
   }
  
   ResultSet rs=null;
   CLOB clob=null;
   String sql1="select cjhcontent from cjhtest where cjhid=? for update";
   pstmt=conn.prepareStatement(sql1);
   pstmt.setInt(1, 1);
   rs=pstmt.executeQuery();
   if(rs.next()){
    //取得刚才的HCONTENT的内容,也就是刚才添加的empty_clob()
    clob=(CLOB) rs.getClob(1);
   }
   //需要用clob.getCharacterOutputStream()流方式输出
   Writer wirte=clob.getCharacterOutputStream();
   wirte.write(cc);  //向大字段定数据
   wirte.flush();    //强制写入
   wirte.close();    //关闭
   rs.close();
   conn.commit();
   pstmt.close();
   conn.close();
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 public static void updateClob(){
  try {
   String content="ABCDEFGHIJKLMNOPQRSTUVWSYZ";
   char[] cc=content.toCharArray();
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@10.99.1.114:1521:orcl","e3baoan","e3baoan");
   conn.setAutoCommit(false);
   String sql="update cjhtest set cjhcontent=empty_clob() where cjhid=?";
   PreparedStatement pstmt=conn.prepareStatement(sql);
   pstmt.setInt(1, 1);
   int i1=pstmt.executeUpdate();
   conn.commit();
   pstmt=null;
   if(i1>0){
    System.out.println("清空成功");
   }
  
   ResultSet rs=null;
   CLOB clob=null;
   String sql1="select cjhcontent from cjhtest where cjhid=? for update";
   pstmt=conn.prepareStatement(sql1);
   pstmt.setInt(1, 1);
   rs=pstmt.executeQuery();
   if(rs.next()){
    clob=(CLOB) rs.getClob(1);
   }
   Writer writer=clob.getCharacterOutputStream();
   writer.write(cc);
   writer.flush();
   writer.close();
   rs.close();
   conn.commit();
   pstmt.close();
   conn.close();
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 public static void getClob(){
  try {
   String content="";
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@10.99.1.114:1521:orcl","e3baoan","e3baoan");
   conn.setAutoCommit(false);
   ResultSet rs=null;
   CLOB clob=null;
   String sql="select cjhcontent from cjhtest where cjhid=?";
   PreparedStatement pstmt=conn.prepareStatement(sql);
   pstmt.setInt(1, 1);
   rs=pstmt.executeQuery();
   if(rs.next()){
    clob=(CLOB) rs.getClob(1);
   }
   if(clob!=null && clob.length()!=0){
    content=clob.getSubString((long)1, (int)clob.length());
   }
   rs.close();
   conn.commit();
   pstmt.close();
   conn.close();
   System.out.println(content);
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 //取得的另一种方式
 public static void getOtherClob(){
  try {
   String content="";
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@10.99.1.114:1521:orcl","e3baoan","e3baoan");
   conn.setAutoCommit(false);
   ResultSet rs=null;
   CLOB clob=null;
   String sql="select cjhcontent from cjhtest where cjhid=?";
   PreparedStatement pstmt=conn.prepareStatement(sql);
   pstmt.setInt(1, 1);
   rs=pstmt.executeQuery();
   if(rs.next()){
    clob=(CLOB) rs.getClob(1);
   }
   if(clob!=null && clob.length()!=0){
    content=Clob2String(clob);
   }
   rs.close();
   conn.commit();
   pstmt.close();
   conn.close();
   System.out.println(content);
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 /**
 * 从大字段对象中读取数据,并转换成字符
 * @return 大字段字符
 */
 public static String Clob2String(CLOB clob)
 {
  String content = null;
  StringBuffer stringBuf = new StringBuffer();

  try
  {
   int length   = 0;
   Reader inStream  = clob.getCharacterStream();  //取得大字侧段对象数据输出流
   char[] buffer  = new char[10];

   while ((length = inStream.read(buffer)) != -1)   //读取数据库 //每10个10个读取
   {
    for (int i=0; i<length; i++)
    {
     stringBuf.append(buffer[i]);
    }
   }
  
   inStream.close();
   content = stringBuf.toString();
  }
  catch(Exception ex)
  {
   System.out.println("ClobUtil.Clob2String:" + ex.getMessage());
  }

  return content;
 }
 
 
 /**
  * 把字符串存入大字段对象中
  * @param content  内容
  * @return
  */
 public static CLOB String2Clob(String content)
 {
  boolean flag = false;
  if(content==null)
   return null;
  CLOB clob=null;
  try
  {
   Writer outStream = clob.getCharacterOutputStream();  //取得大字段对象数据输入流
   char[] data = Library.toChinese(content).toCharArray(); //把源字符串转换成char数组

   outStream.write(data);         //向大字段定数据
   outStream.flush();          //强制写入
   outStream.close();          //关闭
   return clob;
  }
  catch(Exception ex)
  {
   System.out.println("ClobUtil.String2Clob:" + ex.getMessage());
   return null;
  }
 }
}

分享到:
评论

相关推荐

    jdbc 处理clob类型字段

    在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的一套标准API。当我们在处理大型文本...以上所述的增删改查方法是基础操作,实际开发中还应考虑事务管理、异常处理和性能优化等因素。

    jdbc读写Oracle的CLOB字段

    JDBC读写Oracle的CLOB字段

    JDBC方式操作CLOB字段实例

    JDBC方式操作CLOB字段实例代码 。

    weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB 类型转换解决办法

    这是因为 WebLogic 服务器为了更好地管理和操作数据库连接,会使用自己的包装类 `weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB` 来表示 CLOB 类型的数据,而不是直接使用 Oracle 提供的标准 `oracle.sql.CLOB` 类。...

    clob增加、修改

    根据给定文件的信息,本文将深入探讨如何在Java中操作Oracle数据库中的CLOB字段,包括添加和修改等操作。CLOB(Character Large Object)是一种用于存储大量文本数据的数据类型,在处理如文章、评论等长文本时非常...

    基于jdbc处理Clob的使用介绍

    这篇文章将深入探讨如何通过JDBC有效地处理CLOB类型的数据。 1. **什么是CLOB?** CLOB是数据库中用于存储大文本或非结构化字符数据的数据类型。它能存储最多4GB的数据,非常适合保存长篇文章、HTML文档或任何其他...

    JDBC中操作Blob、Clob等对象

    ### JDBC中操作Blob、Clob等对象 #### 一、简介 在JDBC(Java Database Connectivity)编程中,Blob和Clob是非常重要的数据类型。Blob(Binary Large Object)主要用于存储二进制大对象,如图像、音频文件等;而Clob...

    详解jdbc实现对CLOB和BLOB数据类型的操作

    JDBC实现对CLOB和BLOB数据类型的操作 在数据库中,存在两种类型的数据:CLOB(Character Large OBject)和BLOB(Binary Large OBject),它们用于存储大型数据,如文本、图片、音频、视频等。对CLOB和BLOB数据类型...

    Oracle如何对CLOB行字段来执行全文检索

    然而,在 Oracle8i 版本之前,对大字段 CLOB 仍然不支持在 where 子句直接的 Like 操作。这使得开发者无法直接对 CLOB 字段中的内容进行 Like 查找。幸运的是,通过使用 DBMS_LOB 包,我们可以实现对 CLOB 字段中的...

    jdbc_blob_clob.rar

    标题“jdbc_blob_clob.rar”暗示了这个压缩包文件包含的内容与Java Database Connectivity (JDBC) 中处理Blob和Clob对象相关的知识。Blob是Binary Large Object的缩写,用于存储大块二进制数据,如图片、音频或视频...

    oracle数据库的clob大字段在jdbc中的处理方式

    在Java中,当我们需要通过JDBC(Java Database Connectivity)接口与Oracle数据库交互时,处理CLOB字段可能会遇到一些挑战。这篇文档将详细阐述如何在JDBC中有效地读取和操作Oracle数据库的CLOB字段,并将其转换为...

    解析jdbc处理oracle的clob字段的详解

    以下是对`jdbc`处理`oracle`的`clob`字段进行详细分析的关键知识点: 1. **CLOB类型**: - Oracle数据库中,CLOB类型用于存储大文本对象,如XML文档、长篇文章等。 - 与BLOB(Binary Large Object)不同,CLOB...

    关于oracle中clob字段查询慢的问题及解决方法

    这个问题在标题和描述中已经提及,即在对CLOB字段进行“like”操作时,查询速度会变得非常缓慢。 首先,尝试将CLOB字段直接转换为VARCHAR2类型进行查询,如以下语句所示: ```sql select * from table_name where ...

    Oracle clob和blob在jdbc的应用

    在Java编程中,Oracle数据库提供了对大型对象(Large Object)的支持,包括CLOB(Character Large Object)和BLOB(Binary Large Object)。这两种类型用于存储大量的文本数据(CLOB)和二进制数据(BLOB),例如...

    jdbc__clob.rar_oracle

    在Java数据库连接(JDBC)中,Oracle数据库是广泛使用的数据库管理系统之一,它支持各种数据类型,包括大对象(LOB)类型,如Clob(Character Large Object)。本篇将深入探讨如何使用JDBC来操作Oracle数据库中的...

    JAVA对clob的操作

    JAVA对CLOB的操作 在JAVA中,操作Oracle数据库中的BLOB和CLOB类型字段是一种常见的需求。然而,网络上关于JAVA对Oracle中BLOB、CLOB类型字段的操作说明往往不够全面、不够准确,甚至有的简直就是胡说八道。因此,...

    mybatis 对clob类型转换

    在数据库中,CLOB(Character Large Object)类型用于存储大文本数据,如长篇文章或XML文档。在使用MyBatis框架进行数据操作时,我们可能会遇到CLOB类型数据的读写问题,尤其是在转换和插入数据库时。本篇将详细探讨...

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    3. 处理方式:对BLOB进行操作时,通常涉及二进制文件的读写,例如图片的上传和下载。CLOB操作则更偏向于文本内容的处理,如文本编辑、搜索等。 在Oracle数据库中,插入和查询BLOB和CLOB对象有特定的方法: 1. 插入...

Global site tag (gtag.js) - Google Analytics