100分,请专家帮忙解决。oracle 的 CLOB字段写入问题
本人最近使用到ORACLE的CLOB字段,主要保存的是如下的字符串信息:
#
sysname ZJ-HZ-ESN-SR-NE40E-1.MAN
#
super password level 3 cipher ;`*aVR`/WHGQ=^Q`MAF4<1!!
#
info-center loghost 202.96.102.228
#
vlan batch 50 80
#
snmp-agent trap type base-trap
#
ip vpn-instance aaa
route-distinguisher 64743:1001
#
ip vpn-instance CN2-Zhonghewangguan
route-distinguisher 4809:4504
vpn-target 4809:450400 export-extcommunity
vpn-target 4809:450400 import-extcommunity
#
hwtacacs-server template zjdxnoc
hwtacacs-server authentication 202.96.103.57
hwtacacs-server authorization 202.96.103.57
hwtacacs-server accounting 202.96.103.57
如果字符串少的话,保存没有问题,但是 到达一定行数,比如1200 行,就会出现:
ava.sql.SQLException: Io exception: Connection reset
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CConnection.putChars(T4CConnection.java:2678)
at oracle.sql.CLOB.putChars(CLOB.java:433)
.............省略
异常,而且这个异常的地方,就是写的那个,以下是我实验过的所有写入方法
1:第一种写入方法
sql = "select content from tb_confing_file "+whereSql+" for update" ;
conn = getSession().connection();
java.sql.Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
java.sql.ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
/* 获取此clob对象 */
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("content");
/* 第 一种 更新数据 方法
BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
BufferedInputStream in = new BufferedInputStream(new ByteArrayInputStream(configUpdate.getContentStr().getBytes()));
int charstr,count;
count=0;
while ( (charstr = in.read()) != -1) {
out.write(charstr);
System.out.println(count++); //测试发现在 count 打印 8500后,出现异常,但是如果 字符串不多,比如100行,都没有问题
}
in.close();
out.close();
*/
/* 第 二 种 更新数据 方法
java.io.Writer pw = clob.getCharacterOutputStream();
pw.write(configUpdate.getContentStr()); //在这里出现IO 异常
pw.flush();
pw.close();
*/
}
2: 用另一种方法也是一样的有那个IO 异常,如下:
SerializableClob sc= (SerializableClob)tableobj.getContent();
Clob wrapclob = sc.getWrappedClob();
CLOB clob = (CLOB)wrapclob;
java.io.Writer pw = clob.getCharacterOutputStream();
pw.write(ContentStr); //写入出现 Io exception: Connection reset
pw.flush();
pw.close();
我个人感到很纳闷,表字段定义为 : CONTENT CLOB, 网上找了好多资料,都说CLOB 字段可以保存4G的东西,可是什么我的才几K都不到到字符串,却写入不了呢?
请论坛里的牛人,大侠帮个忙,看看是什么问题。
我现在怀疑不是我的程序问题,可能是环境。
我现在的环境是 ORACEL 10G 的,JAVA是:java version "1.5.0_16" ,驱动是:ojdbc14.jar 。
以前这个程序运行都很好的,今天得到的字符串数据有点大,发现不能写入,100分请帮忙解决,或者给个思路。现在正的找不该这么解决啦。