在Java中处理CLOB字段

1.oracle driver的安装

因为操作oracle数据库,所以需要用到jdbc的驱动库,如果安装了oracle可以在oracle安装目下找到classes12.jar,将其拷贝到jdk的安装目录下(对于jdk与tomcat的安装可以在网上查查),以本人的实际安装目录为例:
(1)oracle版本9i:D:/oracle9/ora92/jdbc/lib  在此目录下可以找到classes12.jar
(2)jdk目录:C:/j2sdk1.4.1_04   将(1)中的classes12.jar拷到 C:/j2sdk1.4.1_04/jre/lib/ext目录下面

2.建立数据表
create table FILEINFO
(
  FILEID      INTEGER PRIMARY KEY,
  FILENAME    VARCHAR2(100),
  FILECONTENT CLOB
)

插入一条测试数据
insert into fileinfo values(1,'测试表',empty_clob());
3.具体实现我用eclipse为开发工具
(1)插入clob数据
import java.sql.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;
import java.io.*;

public class putclob {

    /**
     * @param args
     */

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        final String Webserver="192.168.36.32";//WEB服务器IP地址
        final String SID="ora92";//WEB数据库服务器SID
        final String UserID="****";//数据库用户名
        final String Password="****";//数据库密码
        final String sDBDriver = "oracle.jdbc.driver.OracleDriver";
        String sConnStr = "jdbc:oracle:thin:@"+Webserver+":1521:"+SID;
        Connection conn = null;
        Statement stmt=null;
        ResultSet rs = null;
        try
        {
          Class.forName(sDBDriver);
          conn = DriverManager.getConnection(sConnStr, UserID, Password);
          conn.setAutoCommit (false);
          String sql = "select * from fileinfo where fileid=1 for update";
          stmt = conn.createStatement();
          rs = stmt.executeQuery(sql);
            System.out.println("开始操作clob存入:");
          while(rs.next())
          {
             String str = "开始向表clob字段中存入数据";
            putclob g = new putclob();
             CLOB clob = (oracle.sql.CLOB) rs.getClob("filecontent");
            Writer outstream = clob.getCharacterOutputStream();
            outstream.write(str, 0, str.length());
            outstream.close();
            stmt.execute("commit");
            System.out.println("完毕:");
          }
          conn.setAutoCommit(true);
         
        }catch(Exception e){System.out.println(e.getMessage());}       
    }
}
(2)读取clob数据
import oracle.jdbc.driver.*;
import oracle.sql.*;
import java.sql.*;
import java.io.*;

public class getclob {

    /**
     * @param args
     */
    public String getClob(ResultSet rs,String colname) throws Exception
    {
    try{
        CLOB clob = (oracle.sql.CLOB) rs.getClob(colname);
        Reader instream = clob.getCharacterStream();
        char[] buffer = new char[1000];
        int length = 0;
        String Str="";
        while ((length = instream.read(buffer))!=-1)
            {
                Str=Str + new String(buffer,0,length);
            }
        instream.close();
        return Str;
    }catch(Exception e){System.out.println("opendb.getClob():" + e.getMessage());return "";}
    }
   
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        final String Webserver="192.168.36.32";//WEB服务器IP地址
        final String SID="ora92";//WEB数据库服务器SID
        final String UserID="techline";//数据库用户名
        final String Password="techline";//数据库密码
        final String sDBDriver = "oracle.jdbc.driver.OracleDriver";
        String sConnStr = "jdbc:oracle:thin:@"+Webserver+":1521:"+SID;
        Connection conn = null;
        Statement stmt=null;
        ResultSet rs = null;
        try
        {
          Class.forName(sDBDriver);
          conn = DriverManager.getConnection(sConnStr, UserID, Password);
          String sql = "select typeid,fileid,filename,filecontent from fileinfo";
          stmt = conn.createStatement();
          rs = stmt.executeQuery(sql);
          while(rs.next())
          {
            System.out.println(rs.getString("filename"));
             getclob g = new getclob();
            System.out.println("测试clob字段值:"+g.getClob(rs,"filecontent"));
          }
         
        }catch(Exception e){System.out.println(e.getMessage());}
    }
}

总结:在调试过程中出现了"无效的列类型: getCLOB not implemented for class oracle.jdbc.driver.T4CNumberAccessor "错误,经过查证是由于oracle的驱动问题,最开始我用的是10g的classes12.jar,后来用了9i的,此错误消失了.
在网上看到有介绍,在oracle10g中对于clob的操作更方便了(具体未查)

无论是delphi还是java操作clob字段的insert与select都是利用流来操作,这点都一样的(其它工具也如些).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值