java插入clob字段

15 篇文章 0 订阅
4 篇文章 0 订阅

http://blog.csdn.net/gaowenming/article/details/4964767


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,就可以了!

 

下面是详细的实例:

  1. package com.data;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.PreparedStatement;  
  5. import java.sql.ResultSet;  
  6. import java.sql.Statement;  
  7. import oracle.sql.CLOB;  
  8. public class WriteClob {  
  9.     /** 
  10.      * beckham 2009-12-7 下午09:47:36 
  11.      */  
  12.     public static void main(String[] args) throws Exception {  
  13.         Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();  
  14.         String url = "jdbc:oracle:thin:@localhost:1521:menhu";  
  15.         String user = "zm";  
  16.         String password = "zm";  
  17.         Connection conn = DriverManager.getConnection(url, user, password);  
  18.         //设置手动提交  
  19.         conn.setAutoCommit(false);  
  20.         Statement sta = null;  
  21.         ResultSet rs = null;  
  22.         PreparedStatement ps = null;  
  23.         StringBuffer sb = new StringBuffer() ;  
  24.         //clob字段的内容  
  25.         sb.append("aaa").append("/r/n").append("bbbb").append("/r/n").append("ccc") ;  
  26.         String sql ="insert into test values(2,empty_clob()) " ;  
  27.         sta = conn.createStatement() ;  
  28.         sta.executeUpdate(sql) ;  
  29.         conn.commit() ;  
  30.         //锁定并编辑当前数据  
  31.         sql="select cdata from test where id=2 for update" ;  
  32.         rs = sta.executeQuery(sql) ;  
  33.         if(rs.next()){  
  34.             //获取clob对象,此处的clob是oracle.sql.Clob  
  35.             CLOB clob = (CLOB)rs.getClob(1) ;  
  36.             clob.putString(1, sb.toString()) ;  
  37.             //执行更新操作  
  38.             sql="update test set cdata=? where id=2" ;  
  39.             ps = conn.prepareStatement(sql) ;  
  40.             //给clob字段赋值  
  41.             ps.setClob(1, clob) ;  
  42.             ps.executeQuery() ;  
  43.         }  
  44.         conn.commit();  
  45.         rs.close();  
  46.         ps.close();  
  47.         sta.close();  
  48.         conn.close();  
  49.     }  

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值