您的位置:首页 > 编程语言 > Java开发

java-JDBC插入Clob字段

2014-04-14 08:48 302 查看
1)clob类型的数据不能直接insert,要先通过empty_clob()方法给它分配一个locator(同理,blob的用 empty_blob()函数分配locator).然后把它select出来(此时它当然没有数据,但结果集不是空的),得到一个Clob的对象,修改该对象的内容让它满足我们的需要,再通过update方法更新该行记录.

2) 通过select修改含lob类型的记录时一定要锁定该行(通过for update关键字实现),否则oracle会报错.

3) 刚插入的记录就select for update, 会出现"违反读取顺序"错误,解决办法是将自动提交功能置为false,即不允许自动提交,然后commit它,再select,就可以了!

   package com.data;  
    import java.sql.Connection;  
    import java.sql.DriverManager;  
    import java.sql.PreparedStatement;  
    import java.sql.ResultSet;  
    import java.sql.Statement;  
    import oracle.sql.CLOB;  
    public class WriteClob {  
       /** 
        * beckham 2009-12-7 下午09:47:36 
        */  
       public static void main(String[] args) throws Exception {  
           Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();  
           String url = "jdbc:oracle:thin:@localhost:1521:menhu";  
           String user = "zm";  
           String password = "zm";  
          Connection conn = DriverManager.getConnection(url, user, password);  
           //设置手动提交  
           conn.setAutoCommit(false);  
           Statement sta = null;  
           ResultSet rs = null;  
           PreparedStatement ps = null;  
           StringBuffer sb = new StringBuffer() ;  
          //clob字段的内容  
         sb.append("aaa").append("\r\n").append("bbbb").append("\r\n").append("ccc") ;  
          String sql ="insert into test values(2,empty_clob()) " ;  
          sta = conn.createStatement() ;  
          sta.executeUpdate(sql) ;  
           conn.commit() ;  
          //锁定并编辑当前数据  
          sql="select cdata from test where id=2 for update" ;  
          rs = sta.executeQuery(sql) ;  
           if(rs.next()){  
               //获取clob对象,此处的clob是 oracle.sql.Clob  
             CLOB clob = (CLOB)rs.getClob(1) ;  
             clob.putString(1, sb.toString()) ;  
              //执行更新操作  
               sql="update test set cdata=? where id=2" ;  
               ps = conn.prepareStatement(sql) ;  
                //给clob字段赋值  
                ps.setClob(1, clob) ;  
                 ps.executeQuery() ;  
             }  
            conn.commit();  
           rs.close();  
           ps.close();  
           sta.close();  
           conn.close();  
      }  
   }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: