Java存取Clob对象

1.刚开始接触Clob对象,简单的实现了对Clob对象的存取,Blob对象的存取跟它差不多,写入的时候有三部,第一先插入一个空的empty_clob(),然后获得这个cursor,然后再修改,这要牵涉到IO流的操作。。。
贴一下我的代码,写得比较懒,见谅啊各位。。石头轻砸。。。

package com.mj.utils;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.sql.CLOB;

/**
*
* @author M.J
*
*/
public class ClobTest {

private static Connection conn=null;

private static PreparedStatement ps=null;

private static ResultSet rst=null;

static{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:WMG", "hibernate","hibernate");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}

/**
* 插入Clob数据
* @param strClob
* @return
*/
public boolean inserClob(String userid, String strClob){
boolean suc=false;
//CLOB使用的是oracle.sql.CLOB貌似JDBC接口的java.sql.Clob支持读入,但不支持写入Clob对象,Blob也是。。。
//这里需要注意的是,在给HH调试bug的时候,它出的错误是,无法把oracle.sql.CLOB对象转换成oracle.sql.CLOB,因为它连接数据库是用
//了Tomcat配置的数据源,所以在tomcat的common/lib目录下面有一个classes12.jar或者是ojdbc.jar,它的项目里面因为要引用oracle.sql.jar
//所以在项目lib目录下它也放了一个jar,这样造成了jar包之间的冲突,解决方法就是,将Web应用lib目录下的oracle驱动给移除掉(不是从构建路径上给
//remove掉,而是删除,如果remove不起作用,试过。。。),然后外部引用common/lib目录下面的oracle驱动
CLOB clob=null;
//插入一个空的Clob对象,这是一个Cursor
String sql="INSERT into test_clob(userid,clob_test) VALUES(?,empty_clob())";
try {
//禁用自动提交事务
conn.setAutoCommit(false);
ps=conn.prepareStatement(sql);
ps.setString(1, userid);
ps.executeUpdate();
ps.close();

//查询并获得这个cursor,并且加锁
sql="SELECT clob_test FROM test_clob WHERE userid=? for update";
ps=conn.prepareStatement(sql);
ps.setString(1, userid);
rst=ps.executeQuery();
if(rst.next()){
clob=(CLOB)rst.getClob(1);
}


//获得clob对象的输出流
PrintWriter pw=new PrintWriter(clob.getCharacterOutputStream());
pw.write(strClob);
//一定要flush(),否则不会将String对象写入到Clob当中去。。。
pw.flush();
ps.close();

//更新clob对象
sql="UPDATE test_clob set clob_test =? where userid=?";
ps=conn.prepareStatement(sql);
ps.setClob(1, clob);
ps.setString(2, userid);
ps.executeUpdate();
ps.close();
conn.commit();
pw.close();
} catch (SQLException e) {
e.printStackTrace();
}

return suc;
}
/**
* 输出Clob对象
* @param userid
*/
public String readClob(String userid){
String test_clob="";
CLOB clob=null;
StringBuffer sb=new StringBuffer();
String sql="SELECT * FROM test_clob WHERE userid='"+userid+"'";
try {
ps=conn.prepareStatement(sql);
rst=ps.executeQuery();
if(rst.next()){
clob=(CLOB)rst.getClob(2);
}
Reader reader=clob.getCharacterStream();
char[] buffer=new char[1024];
int length=0;
while((length=reader.read(buffer))!=-1){
sb.append(buffer, 0, length);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
test_clob=sb.toString();
return test_clob;
}
public static void main(String[] args){
new ClobTest().inserClob("4","我是Clob,哈哈");
String test=new ClobTest().readClob("4");
System.out.println(test);
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值