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

java插入clob字段

2014-07-16 17:17 381 查看
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,就可以了!

 

下面是详细的实例:

[java] view
plaincopy

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();  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java clob