java 插入oracle clob字段问题
使用此方法 不能更新clob字段的值,每次更新stmt.executeUpdate();//执行SQL,
获得的执行条数为0,因此每次插入都是empty_clob() ,也不报错误或者异常,哪位大侠有遇到类似情况的吗
// --------------clob字段测试方法---------------//
//修改content的值,插入CLOB字段(网上代码)
public void updateClob(Connection conn,String seqcode,String content) throws Exception
{
//-----strat:为存储过程建立数据库连接-----//
Pub_DatabaseChoice pub_DatabaseChoice = new Pub_DatabaseChoice();
String connstr=pub_DatabaseChoice.getConnStr();
String user=pub_DatabaseChoice.getUser();
String passwd=pub_DatabaseChoice.getPassword();
//Class.forName("oracle.jdbc.driver.OracleDriver");
//conn = DriverManager.getConnection(connstr,user, passwd);
Properties props = new Properties();
props.put("user", user );
props.put("password", passwd);
props.put("SetBigStringTryClob", "true");
DriverManager.registerDriver(new OracleDriver());
conn = DriverManager.getConnection( connstr, props );
// -----end:为存储过程建立数据库连接-----//
String sql = "update " + tableName + " set content=? where seqcode="+seqcode;
//Statement pstmt = null;
PreparedStatement stmt = null;
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
try
{
// oracle.sql.CLOB newClob = oracle.sql.CLOB.createTemporary(conn, false, oracle.sql.CLOB.DURATION_CALL);
// newClob.setString(1, content);
//java.sql.Clob c = new javax.sql.rowset.serial.SerialClob( "abc ".toCharArray());//用于jdk5.0
// CLOB Clob = oracle.sql.CLOB.empty_lob();
// Clob.setString(1,content);
//执行SQL有两种方式PreparedStatement 对象和Statement对象,本人使用 PreparedStatement 对象
stmt=conn.prepareStatement(sql);//加载SQL语句
//由于PreparedStatement 支持SQL带有问号“?”可以动态替换?的内容。以下是替换?的方法
//替换?的方法 “1”代表第一为“?”(参数的设置是从1开始的,不是0开始)
//正常的插入方式
int len = content.length();
System.out.println("len:"+len);
// //创建并实例化一个CLOB对象
CLOB clob = oracle.sql.CLOB.createTemporary(conn,false,1);
// //对CLOB对象赋值
clob.putString(1,content);
stmt.setClob(1,clob);
//Reader clobReader = new StringReader(content); //将 content转成流形式
//stmt.setCharacterStream(1,clobReader,len);
//stmt.setClob(1,newClob);
int num=stmt.executeUpdate();//执行SQL
if(num>0)
{
System.out.println("ok");
conn.commit();
}
else
{
System.out.println("NO");
}
}catch (Exception e) {
e.printStackTrace();
}
conn.setAutoCommit(defaultCommit);
}