问题描述
使用此方法不能更新clob字段的值,每次更新stmt.executeUpdate();//执行SQL,获得的执行条数为0,因此每次插入都是empty_clob(),也不报错误或者异常,哪位大侠有遇到类似情况的吗//--------------clob字段测试方法---------------////修改content的值,插入CLOB字段(网上代码)publicvoidupdateClob(Connectionconn,Stringseqcode,Stringcontent)throwsException{//-----strat:为存储过程建立数据库连接-----//Pub_DatabaseChoicepub_DatabaseChoice=newPub_DatabaseChoice();Stringconnstr=pub_DatabaseChoice.getConnStr();Stringuser=pub_DatabaseChoice.getUser();Stringpasswd=pub_DatabaseChoice.getPassword();//Class.forName("oracle.jdbc.driver.OracleDriver");//conn=DriverManager.getConnection(connstr,user,passwd);Propertiesprops=newProperties();props.put("user",user);props.put("password",passwd);props.put("SetBigStringTryClob","true");DriverManager.registerDriver(newOracleDriver());conn=DriverManager.getConnection(connstr,props);//-----end:为存储过程建立数据库连接-----//Stringsql="update"+tableName+"setcontent=?whereseqcode="+seqcode;//Statementpstmt=null;PreparedStatementstmt=null;booleandefaultCommit=conn.getAutoCommit();conn.setAutoCommit(false);try{//oracle.sql.CLOBnewClob=oracle.sql.CLOB.createTemporary(conn,false,oracle.sql.CLOB.DURATION_CALL);//newClob.setString(1,content);//java.sql.Clobc=newjavax.sql.rowset.serial.SerialClob("abc".toCharArray());//用于jdk5.0//CLOBClob=oracle.sql.CLOB.empty_lob();//Clob.setString(1,content);//执行SQL有两种方式PreparedStatement对象和Statement对象,本人使用PreparedStatement对象stmt=conn.prepareStatement(sql);//加载SQL语句//由于PreparedStatement支持SQL带有问号“?”可以动态替换?的内容。以下是替换?的方法//替换?的方法“1”代表第一为“?”(参数的设置是从1开始的,不是0开始)//正常的插入方式intlen=content.length();System.out.println("len:"+len);////创建并实例化一个CLOB对象CLOBclob=oracle.sql.CLOB.createTemporary(conn,false,1);////对CLOB对象赋值clob.putString(1,content);stmt.setClob(1,clob);//ReaderclobReader=newStringReader(content);//将content转成流形式//stmt.setCharacterStream(1,clobReader,len);//stmt.setClob(1,newClob);intnum=stmt.executeUpdate();//执行SQLif(num>0){System.out.println("ok");conn.commit();}else{System.out.println("NO");}}catch(Exceptione){e.printStackTrace();}conn.setAutoCommit(defaultCommit);}
解决方案
解决方案二:
我记得oracle8中要先insert一个empty_clob(),然后update掉该字段才行