日期:2014-05-18  浏览次数:20712 次

跪求高手进来 插入clob的问题

if(rs.next()){
oracle.sql.CLOB   clobtt   =   (oracle.sql.CLOB)rs.getClob(colName);
               
}  

执行到这里就被debug了,类型转换不了,求高手指点一下

------解决方案--------------------
插入BLOB的,樓主可借鑒一下.

17 File f=new File(args[0]);
18 PreparedStatement pstmt = con.prepareStatement(
19 "Insert into BLOBTEST(NAME,VI,ID) VALUES(?,EMPTY_BLOB(),?) ");
20 int num=Integer.parseInt(args[1]);
21 pstmt.setString(1,args[0]);
22 pstmt.setInt(2,num);
23 pstmt.execute();
24 pstmt.close();
25 Statement stmt = con.createStatement();
26 ResultSet rs = stmt.executeQuery( "SELECT VI FROM BLOBTEST WHERE ID= ' "+num+ " ' FOR UPDAT
27 rs.next();
28 oracle.sql.BLOB BB=(oracle.sql.BLOB)rs.getBlob(1);
29 OutputStream blobOutputStream =BB.getBinaryOutputStream();
30 InputStream sampleFileStream = new FileInputStream(f);
31 byte[] buffer = new byte[10240];
32 int nread = 0;
33 while( (nread= sampleFileStream.read(buffer)) != -1 )
34 blobOutputStream.write(buffer, 0, nread); // Write to Blob
35 sampleFileStream.close();
36 blobOutputStream.close();
37 con.commit();

------解决方案--------------------
假设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


------解决方案--------------------
楼上的回答貌似不错
顶一下