急。。。读取ORACLE10G的CLOB类型的内容时出错,当我输入超过10000的汉字时,读取的时候出错误

rongdajian 2010-01-12 05:23:00
各位,请教一个有关操作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 ;


各位,请问这是怎么回事儿呢,在线等。。。谢谢!
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rongdajian 2010-01-13
  • 打赏
  • 举报
回复
谢谢各位的热心帮助,问题已经解决,马上结贴!
rongdajian 2010-01-13
  • 打赏
  • 举报
回复
谢谢各位的热情回复,我先去ORACLE去看看,有问题再回来!~_~
liguangwen86 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 crazylaa 的回复:]
oracle 官方文档 CLOB 10g
http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/handlingclobsinoraclejdbc10g.html
[/Quote]

crazylaa 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zl3450341 的回复:]
引用 2 楼 crazylaa 的回复:
oracle 官方文档 CLOB 10g
http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/handlingclobsinoraclejdbc10g.html

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.

[/Quote]

瓦考,英文这么牛。
zl3450341 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 crazylaa 的回复:]
oracle 官方文档 CLOB 10g
http://www.oracle.com/technology/sample_code/tech/java/codesnippet/jdbc/clob10g/handlingclobsinoraclejdbc10g.html
[/Quote]
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.
maer56 2010-01-12
  • 打赏
  • 举报
回复
到甲骨文网站下载个最新的驱动试试
ojdbc开头的。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧