jsp插入clob字段,出现的异常
下面是我用jsp插入oracle   9i   的clob   的程序片段. 
                   String   Sql= "INSERT   INTO   website.ynews(id,title,content,classid)   VALUES(newsid.nextval,?,?,?) "; 
                   stmt=con.prepareStatement(Sql); 
                   stmt.setString(1,   txtshowname); 
                   StringBufferInputStream   sbin   =   new   StringBufferInputStream(note); 
                   stmt.setAsciiStream(2,sbin,note.length()); 
                   stmt.setString(3,   classid); 
                   con.setAutoCommit(true); 
                   stmt.execute(); 
                   con.commit(); 
                   stmt.close(); 
 插入短的文本可以,但一旦长一些,比如2000字左右就会报下面的异常.    
javax.servlet.ServletException:   Io   异常:   Char      数组不够长:   javaCharsToUtf8Bytes   
 连接用的是Tomcat   的连接池. 
 大家帮帮忙,   我弄这个弄了好多天了.或者帮我改改这段代码,只能能插入clob字段就行.万分感谢!!!! 
------解决方案--------------------这个字段类型最多只能存2000个字 
 如果真的有这么多字数的话,那只能判断一下,超出部分存在下一个字段了
------解决方案--------------------转相关资料:    
 假设col2是CLOB: 
 写操作:   
 String sql =  "insert into tb_commendtemp (col1,col2) values( '111 ',?) "; 
 string s =  "长文本 "; 
 StringBufferInputStream sbin = new StringBufferInputStream(s); 
 PreparedStatement ps = query.getPreStmt(sql); 
 ps.setAsciiStream(1,sbin,s.length()); 
 int i = ps.executeUpdate(); 
 ps.close(); 
 sbin.close(); 
 if(i> 0) ok; 
 如果是二进制文件就用FileInputStream写进去   
 读的时候只要 
 rs.getAsciiStream(); 
 rs.getUnicodeStream(); 
 rs.getBinaryStream(); 
 看它们的名字就知道是得到什么类型的的数据流了.   
 如果存放的是二进制文件,比如图形,执行文件,压缩文件最好还是blob保险. 
 写和读也要用二进制流, 
 DataInputStrean和DatOutputStream.有时用UNICODE的字符流也能行,但 
 不保险.如果是文本,用Clob和LONG都行.读和写用 
 BuffreedReader和PrintWriter更方便.     
 要想在一个网页上同时显示从程序中推出的文字和图象,这项技术目前在国内 
 可以值100万. 
 因为目前浏览器要想同时显示HTML文档和image文档,你到目前在国内还没有 
 发现,要用到server push技术.你想想一下电子邮件的文档头,是复合型的,把 
 数据用Base 64编码就可以通过特定的文档类型同时显示文字和图片了.可是浏览器目前还做不到.   
 blob:二进制,如果exe,zip 
 clob:单字节码,比如一般的文本文件. 
 nlob:多字节码,如UTF格式的文件.   
 如果带格式的文件如果WORD,EXECL等如果要保持格式不被破坏,最好以BLOB 
 方式,它近似于以byte的原始方式存放,缺点当然是操作时效率低(慢).   
 操作CLOB,别的可以看我上面的写和读的例子,只要注意把 
 写pstmt.setBinaryStream()改成rs.setAsciiStream(); 
 读pstmt.getBinaryStream()改成rs.getBinaryStream();   
 在从文件读成流的时候用Reader而不要用DataInuputStream
------解决方案--------------------学习
------解决方案--------------------给你参考下,希望有用(网上的代码). 
 strSQL =  "insert into product(ID,slID,pID,postID,name,num,unit,localPrice,otherPrice,agioPrice,phone,staTime,endTime,flag_1,flag_2,rule,summaryMemo,detailMemo) values(......+empty_clob()) "; 
 其中detailMemo是clob型   
 				pstmt       =   con.prepareStatement(strSQL);  
 				int inserNum = pstmt.executeUpdate(); 
 				int inserNum_1 = 0; 
 				strSQL 		=  "select detailMemo from product where ID= ' "+ID+ " ' for   update "; 
 				pstmt       =   con.prepareStatement(strSQL);  
 				ResultSet rs1 = pstmt.executeQuery(); 
 				if(rs1 != null && rs1.next()) 
 				{ 
 					oracle.sql.CLOB   clob   =