插入clob的问题,急!

icystone 2006-05-08 04:43:57
各位高手,我想向oracle中插入clob,我的代码如下:
public static void clobInsert(Connection conn, String infile) throws Exception
{
String strTemp = "";for(int i=0;i<1000;i++)strTemp+=i;
oracle.jdbc.driver.OraclePreparedStatement pstmt = null;
oracle.jdbc.driver.OracleResultSet rs = null;
String query = "";

conn.setAutoCommit(false);
query = "insert into test(id,content) values(?,empty_clob())";
pstmt = (oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(query);
pstmt.setInt(1,1);
pstmt.executeUpdate();
pstmt = null;
query = "select content from test where id = 1 for update";
pstmt =(oracle.jdbc.driver.OraclePreparedStatement)conn.prepareStatement(query);
rs= (oracle.jdbc.driver.OracleResultSet)pstmt.executeQuery();

oracle.sql.CLOB clobtt = null;
if(rs.next()){
clobtt = (oracle.sql.CLOB)rs.getClob(1);
}
Writer wr = clobtt.getCharacterOutputStream();
wr.write(strTemp);
wr.flush();
wr.close();
rs.close();
conn.commit();
}

驱动:oracle10g的jdbc14
出现错误 java.io.IOException: Io 异常: End of TNS data channel
我在网上查了好久了,都是这样说的。
...全文
190 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovelanzhi716 2006-05-09
  • 打赏
  • 举报
回复
sql="insert into site_content(id,createtime,name,description,author,waptype,catalogid,isvalid,content)"
+" values('"+contentid+"',sysdate,'"+articleName+"','"+description+"','"+author+"','1','"+catalogid+"','0',EMPTY_CLOB())";
stmt.executeUpdate(sql);//建立文章内容

sql="select content from site_content where id='"+contentid+"' FOR UPDATE";//将内容写CLOB字段
rs=stmt.executeQuery(sql);
if(rs.next()){
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("content");
//java.io.OutputStream os =clob.getAsciiOutputStream();
//byte[] data = content.getBytes("ASCII");
BufferedWriter os = new BufferedWriter(clob.getCharacterOutputStream());
char[] data=content.toCharArray();
os.write(data);
os.flush();
}
这是一段写的代码,最一个字段就是clob型的,你看看吧
eidolon_warrior 2006-05-09
  • 打赏
  • 举报
回复
试试下面的方法
try {
/* 插入一个空的CLOB对象 */
stmt.executeUpdate("INSERT INTO TEST_CLOB VALUES ('111', EMPTY_CLOB())");
/* 查询此CLOB对象并锁定 */
ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");
while (rs.next()) {
/* 取出此CLOB对象 */
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");
/* 向CLOB对象中写入数据 */
BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
BufferedReader in = new BufferedReader(new FileReader(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}
/* 正式提交 */
conn.commit();
} catch (Exception ex) {
/* 出错回滚 */
conn.rollback();
throw ex;
}
icystone 2006-05-09
  • 打赏
  • 举报
回复
我查了好多的资料,包括csdn的贴子,对clob都是这么说的。可就是有错误,怎么办呀???
sole_lodestar 2006-05-09
  • 打赏
  • 举报
回复
更换你的应用的jdbc包,换成10g及以上的,就可以了,操作如同字符型
icystone 2006-05-09
  • 打赏
  • 举报
回复
以上二位,你们的代码自己运行过吗?你们说的方法我在网上找到过,每次的执行结果都是产生例外 java.io.IOException: Io 异常: End of TNS data channel
netsummer123 2006-05-08
  • 打赏
  • 举报
回复
Clob对象最好用BinaryInputStream写入数据库

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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