This Domain(Admin5.com) is for Sale:

通过JDBC操纵Oracle数据库LOB字段的分析

时间:2007-12-23  来源:不详  作者:迈克DB
在Oracle中,LOB(LargeObject,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据量非常大的业务领域(如图象、档案等)。而LONG、LONGRAW等类型的字段,虽然存储容量也不小(可达2GB),但由于一个表中只能有一个这样类型的字段的限制,现在已很少使用了。
LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(BinaryLargeObject),适用于存贮非文本的字节流数据(如程序、图象、影音等)。而CLOB,即字符型大型对象(CharacterLargeObject),则与字符集相关,适于存贮文本型的数据(如历史档案、大部头著作等)。
下面以程序实例说明通过JDBC操纵Oracle数据库LOB类型字段的几种情况。
先建立如下两个测试用的数据库表,PowerDesignerPD模型如下:
建表SQL语句为:
CREATETABLETEST_CLOB(IDNUMBER(3),CLOBCOLCLOB)
CREATETABLETEST_BLOB(IDNUMBER(3),BLOBCOLBLOB)
一、CLOB对象的存取
1、往数据库中插入一个新的CLOB对象
publicstaticvoidclobInsert(Stringinfile)throwsException
{
/*设定不自动提交*/
booleandefaultCommit=conn.getAutoCommit(); 内容来自dedecms
conn.setAutoCommit(false);
try{
/*插入一个空的CLOB对象*/
stmt.executeUpdate("INSERTINTOTEST_CLOBVALUES(’111’,EMPTY_CLOB())");
/*查询此CLOB对象并锁定*/
ResultSetrs=stmt.executeQuery("SELECTCLOBCOLFROMTEST_CLOBWHEREID=’111’FORUPDATE");
while(rs.next()){
/*取出此CLOB对象*/
oracle.sql.CLOBclob=(oracle.sql.CLOB)rs.getClob("CLOBCOL");
/*向CLOB对象中写入数据*/
BufferedWriterout=newBufferedWriter(clob.getCharacterOutputStream());
BufferedReaderin=newBufferedReader(newFileReader(infile));
intc;
while((c=in.read())!=-1){
out.write(c);
}
in.close();
out.close();
}
/*正式提交*/
conn.commit();
}catch(Exceptionex){
/*出错回滚*/
conn.rollback();
throwex;
}
/*恢复原提交状态*/
conn.setAutoCommit(defaultCommit);
}
2、修改CLOB对象(是在原CLOB对象基础上进行覆盖式的修改)
publicstaticvoidclobModify(Stringinfile)throwsException
{
/*设定不自动提交*/ 本文来自织梦
booleandefaultCommit=conn.getAutoCommit();
conn.setAutoCommit(false);
try{
/*查询CLOB对象并锁定*/
ResultSetrs=stmt.executeQuery("SELECTCLOBCOLFROMTEST_CLOBWHEREID=’111’FORUPDATE");
while(rs.next()){
/*获取此CLOB对象*/
oracle.sql.CLOBclob=(oracle.sql.CLOB)rs.getClob("CLOBCOL");
/*进行覆盖式修改*/
BufferedWriterout=newBufferedWriter(clob.getCharacterOutputStream());
BufferedReaderin=newBufferedReader(newFileReader(infile));
intc;
while((c=in.read())!=-1){
out.write(c);
}
in.close();
out.close();
}
/*正式提交*/
conn.commit();
}catch(Exceptionex){
/*出错回滚*/
conn.rollback();
throwex;
}
/*恢复原提交状态*/
conn.setAutoCommit(defaultCommit);
}
本文来自织梦

看完这篇,您有何感觉呢?

上一篇:My SQL安全性指南   下一篇:创建Standby Database

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息