我用的是oracle9i的数据库。
现在要将一段文字存在一个CLOB的字段中。
存的时候没有问题。但是在读取的时候有点问题。
如果文字的长度不是很大,可以读取。
如果文字的长度比较大,估计超过10000的时候就有问题。
我的代码是这样的。
//从数据库中将clob对象取出。
.................
................
1 oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getObject("content");
2 Reader in = clob.getCharacterStream();
3 StringBuffer buf = new StringBuffer();
4 try{
5 int n ;
6 char[] b = new char[1024];
7 while((n = in.read(b)) > 0){
8 String s = new String(b);
9 buf.append(s) ;
10 }
11 }catch(Exception e){
12 e.printStackTrace();
13 }
14 String content = return buf.toString() ;
当文字的长度比较大的时候,会在第7行出错。
报的错误是:不能在 UTF8 和 UCS2 之间转换: failUTF8Conv
我知道的是getCharacterStream方法会在读取数据的同时会把字符从数据库的
编码方式转换成UCS2的编码方式。
但是不知道为什么在文字不是很多的时候没有报错,而文字很多的时候就报错呢?
请问大虾怎么解决这个问题?
直接 String read = clob.getSubString( 1,(int)clob.length()) ;
呵呵,不知道行不行..
要不一次都读取,要不readline .呵呵,多试试:)
我是sql server.用clob方式读取ntext字段...
只是我往里存的时候不知道怎么存,
rs.updateCharacterStream(2 ,fileReader,(int)file.length() ) ;
rs.updateRow() ;
这种方法只能存入 2000 多的字符,多了就报错了...
不知道是驱动的问题还是其它问题...
呵呵。以前也碰到过这样的问题。
用String read = clob.getSubString( 1,(int)clob.length()) ;也
还是不行的。
后来发现如果clob.length在大于一万两千以上时出现问题的概率比较大,
所以每次getSubString的长度定为10000,这样就可以解决你的问题。
比如如果有300000个字符。
那就用三次getSubString的方法,分别把字符从1----10000,10001-20000,
20001-30000来获得,再加起来就行了!
呵呵。。笨办法。。。。
你试一下!