clob大字段jdbc直连(怎么连都可以,这里写的是直连的方法),新增和修改时不乱码的处理

原创 2008年09月29日 18:57:00

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.Reader;
import java.io.StringReader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
/**
 *
 * @author 沙振华
 *2008年9月26日
 */
  public class Clobnono
{
    //ORACLE驱动程序
    private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";
    //ORACLE连接用URL
    private static final String URL = "jdbc:oracle:thin:@10.62.1.12:1521:oracle";
    //用户名
    private static final String USER = "wtdpf";
    //密码
    private static final String PASSWORD = "wtdpf";
    //数据库连接
    private static Connection conn = null;
    //SQL语句对象
    private static Statement stmt = null;
 //空的构造方法
 public Clobnono(){}
 //建立测试用表格
    public static void createTables() throws Exception {
     try {
      stmt.executeUpdate("CREATE TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)");
      //stmt.executeUpdate("CREATE TABLE TEST_BLOB ( ID NUMBER(3), BLOBCOL BLOB)");
       } catch (Exception ex) {}
     }


 /**
  *  * 描述:查出所有大字段的值
  * 沙振华
  * 2008-9-26
  * @param getclobpre 查询语句
  * @param clob  大字段clob的列名
  * @throws Exception
  */ 
 public static String getClobPre(String getclobpre,String clob) throws Exception{
     String clobbig="";
  PreparedStatement pstm = null;//预处理语句,用于查询数据
        ResultSet rs = null;
        pstm = conn.prepareStatement(getclobpre);
        rs = pstm.executeQuery();
        while(rs.next()){
        clobbig=getClobString(rs.getClob(clob));
            }
  return clobbig;
 }
    /*
     * 往数据库中插入一个新的CLOB对象
     * insertSQL  插入空clob占位
     * updateSQL  把空值修改
     * bigString  大字段clob数据
     * updateColumn  大字段clob列名
     * */
   public static void clobInsert(String insertSQL,String updateSQL,String bigString,String updateColumn) throws Exception {
    /* 设定不自动提交 */
      boolean defaultCommit = conn.getAutoCommit();
      conn.setAutoCommit(false);
      try {
       /* 插入一个空的CLOB对象 */
       stmt.executeUpdate(insertSQL);
       /* 查询此CLOB对象并锁定 */
       ResultSet rs = stmt.executeQuery(updateSQL);
       while (rs.next()) {
        //* 取出此CLOB对象
        oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob(updateColumn);//updateColumn是要处理的大字段名
        /* 向CLOB对象中写入数据 */
        BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
        BufferedReader in = new BufferedReader(new StringReader (bigString));//bigString是要处理的大字段值
        int c;
        while ((c=in.read())!=-1) {
         out.write(c);
        }
        in.close();
        out.close();
       }
       /* 正式提交 */
       conn.commit();
      } catch (Exception ex) {
       /* 出错回滚 */
       conn.rollback();
       throw ex;
      }
      //恢复原提交状态
      conn.setAutoCommit(defaultCommit);
   }
     //读取大字段clob
   public static String getClobString(Clob c) { 
    try {
     Reader reader=c.getCharacterStream();
     if (reader == null) {
      return null;
     }
     StringBuffer sb = new StringBuffer();
     char[] charbuf = new char[4096];
     for (int i = reader.read(charbuf); i > 0; i = reader.read(charbuf)) {
      sb.append(charbuf, 0, i);
     }
     return sb.toString();
    } catch (Exception e) {
     return "";
    }
   }
   //main方法
   public static void main(String[] args) throws Exception{
  /* 装载驱动,建立数据库连接 */
  Class.forName(DRIVER);
  conn = DriverManager.getConnection(URL,USER,PASSWORD);
  stmt = conn.createStatement();
  /* 建立测试表格 */
  createTables();
  /* CLOB对象插入 */
  clobInsert("insert into TEST_CLOB  (id,CLOBCOL) values ('789', empty_clob())", "select * from TEST_CLOB where id='789' for update", "大发发方法多发发生", "CLOBCOL");
  /* CLOB对象查询 */
   String clobpre=getClobPre("select * from TEST_CLOB where id='789' ","CLOBCOL");
         System.out.println("**2333332@@@*"+clobpre);
        /* CLOB对象修改 */
         clobUpdate("select * from TEST_CLOB where id='789' for update","小忒啊对方答复的沙发啊", "CLOBCOL" );
        /* CLOB对象修改后查询 */
         String clobuuuppp=getClobPre("select * from TEST_CLOB where id='789' ","CLOBCOL");
         System.out.println("**233333######32@@@*"+clobuuuppp);
   
  }
  /**
   *
   * 描述:
   * 沙振华
   * 2008-9-26
   * @param bigstring
   * @param updatesql
   * @param updatecolumn
   * @throws Exception
   */
   public static void clobUpdate( String updatesql,String bigstring, String updatecolumn) throws Exception {
         
       /* 设定不自动提交 */
       boolean defaultCommit = conn.getAutoCommit();
       conn.setAutoCommit(false);
       try {
           /*
            * 查询CLOB对象并锁定 SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR
            * UPDATE
            */
           ResultSet rs = stmt.executeQuery(updatesql);
           while (rs.next()) {
               /*
                * 获取此CLOB对象 CLOBCOL
                */
               oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob(updatecolumn);
               /* 进行覆盖式修改 */
               BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
               BufferedReader in = new BufferedReader(new StringReader (bigstring));
               int c;
               while ((c = in.read()) != -1) {
                   out.write(c);
               }
               in.close();
               out.close();
           }
           /* 正式提交 */
           conn.commit();
       }
       catch (Exception ex) {
           /* 出错回滚 */
           conn.rollback();
           throw ex;
       }
       /* 恢复原提交状态 */
       conn.setAutoCommit(defaultCommit);
   }
  
}  

Java JDBC | 四种连接数据库的方法

四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)    一、环境     1、数据库驱动jar文件        2、DBCP方法         ...
  • u013045987
  • u013045987
  • 2016年04月27日 19:55
  • 8273

Spring 方式处理 Clob、Blob 大字段

1、在 applicationContext.xml 文件中增加如下配置: Clob大字段 --> bean id= "nativeJdbcExtractor" class="...
  • Bin594505536
  • Bin594505536
  • 2015年07月03日 16:39
  • 501

jdbc方式读取oracle的clob字段实例

转自:http://tech.sina.com.cn/s/2008-07-07/1007721886.shtml
  • guchuanlong
  • guchuanlong
  • 2014年05月05日 17:17
  • 1710

Java JDBC读取大文本类型数据(CLOB)

Java JDBC读取大文本类型数据(CLOB) 开发中我们常常要把一些大文本类型数据存入数据库,例如一片文章这是后我们就需要数据库的CLOB类型来存储了。   一、建立数据库表 此不省略,因...
  • hexiaohu2009
  • hexiaohu2009
  • 2012年12月28日 22:46
  • 5183

Android采用jdbc直连MySQL,实现虚拟机和手机访问数据库

本文将介绍在Android平台下如何利用jdbc方式连接电脑服务器的MySQL。 值得注意的是:由于数据库账号和密码均写入Android代码中,通过反编译很有可能获得你的账号密码。所以采用jdbc方式...
  • TracelessLe
  • TracelessLe
  • 2015年05月20日 19:25
  • 4226

数据库中取Clob类型字段出现乱码

DataReader 的默认行为是在整个数据行可用时立即以行的形式加载传入数据。但是,对于二进制大对象 (BLOB) 则需要进行不同的处理,因为它们可能包含数十亿字节的数据,而单个行中无法包含如此多的...
  • hbzxf
  • hbzxf
  • 2004年09月17日 16:18
  • 2941

JDBC连接SqlServer2008图解:直连(纯JAVA方式)

一、下载JDBC驱动          http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=a737000d-68d0-453...
  • zhouhuan965
  • zhouhuan965
  • 2011年03月18日 09:13
  • 3521

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

1、 读取操作 CLOB   java 代码 Java代码   //获得数据库连接            Connection con = ConnectionFactory.getCo...
  • zmx729618
  • zmx729618
  • 2016年06月02日 17:41
  • 2376

解决JDBC访问数据库中文乱码问题

通过JDBC操作数据库表时,如果记录中有中文,可能会碰到乱码的问题。主要原因是字符编码(characterEncoding)不正确,不外乎以下几个方面: 1、在数据库服务器上创建表格时没有选择支持中...
  • BlueBlueSkyZ
  • BlueBlueSkyZ
  • 2016年08月23日 16:06
  • 2144

直接路由与非直接路由&直连路由静态路由动态路由的定义与区别

直接路由与非直接路由     IP协议是根据路由转发数据的。路由器中的路由有两种:直接路由和非直接路由     (1) 直接路由     直接路由是指路由器各网络接口所直连的网络之间进行通信所使...
  • qq_24373811
  • qq_24373811
  • 2016年12月13日 13:40
  • 704
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:clob大字段jdbc直连(怎么连都可以,这里写的是直连的方法),新增和修改时不乱码的处理
举报原因:
原因补充:

(最多只允许输入30个字)