各位,请教一个有关操作ORACLE10G的CLOB类型时出错,当我输入超过10000的汉字时,保存的时候没有出现异常,但是当我读取或者编辑的时候就出现如下错误:
java.io.IOException: 不能在 UTF8 和 UCS2 之间转换
 at oracle.jdbc.dbaccess.DBError.SQLToIOException(DBError.java:625)
 at oracle.jdbc.driver.OracleClobReader.needChars(OracleClobReader.java:178)
 at oracle.jdbc.driver.OracleClobReader.read(OracleClobReader.java:133)
 at java.io.BufferedReader.fill(BufferedReader.java:136)
 at java.io.BufferedReader.readLine(BufferedReader.java:299)
 at java.io.BufferedReader.readLine(BufferedReader.java:362)
 at pde.ams.database.jdbc.JdbcDao.getContent(JdbcDao.java:548)
 at pde.ams.business.action.WClassAction.getContent(WClassAction.java:355)
 at org.apache.jsp.index.showContent_jsp._jspService(showContent_jsp.java:218)
 at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
 at pde.ams.filters.AmsFilter.doFilter(AmsFilter.java:82)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
 at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
 at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
 at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
 at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
 at java.lang.Thread.run(Thread.java:595)
[2010-01-11 16:43:29] ERROR (JdbcDao.java:563) java.io.IOException: 不能在 UTF8 和 UCS2 之间转换而我操作的代码如下:public String getContent(String tableName, String contentFD, String ID)
   throws SQLException {
  Statement statement = null;
  ResultSet rs = null;
  String content = "" ;
  //Add start 2010-01-11 Rongdajian
  StringBuffer sb = new StringBuffer();
  //Add end 2010-01-11 Rongdajian
  try {
   statement = connection.createStatement();
   rs = statement.executeQuery("select " + contentFD + " from "
     + tableName + " where ID = '" + ID + "' ");
   if (rs.next()) {
    oracle.sql.CLOB clob = (oracle.sql.CLOB) (rs.getClob(1));
    if (clob != null) {
     //得到流
     Reader is = clob.getCharacterStream();
     BufferedReader br = new BufferedReader(is);
     String s = br.readLine();
     while (s != null) {
      //Modify start 2010-01-11 Rongdajian
      //content += s;
      sb.append(s) ;
      //Modify end 2010-01-11 Rongdajian
      s = br.readLine();
     }
     br.close();
     is.close();
    }
   }
  } catch (Exception e) {
   statement.close();
   e.printStackTrace();
   logger.error(e);
  } finally {
   rs.close();
   statement.close();
  }
  //Add start 2010-01-11 Rongdajian
  content = sb.toString() ;
  //Add end 2010-01-11 Rongdajian
  return content ;
各位,请问这是怎么回事儿呢,在线等谢谢!

解决方案 »

  1.   

    到甲骨文网站下载个最新的驱动试试
    ojdbc开头的。
      

  2.   

    oracle 官方文档 CLOB 10g
    http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/handlingclobsinoraclejdbc10g.html
      

  3.   

    This document will help you understand:  
    • How to easily handle the CLOB data at the JDBC layer using enhanced APIs available with Oracle JDBC 10g
    • How to run the sample Java application demonstrating the easy handling of CLOB data in the JDBC code. 
      

  4.   

    谢谢各位的热情回复,我先去ORACLE去看看,有问题再回来!~_~