数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

jdbc方式读取oracle的clob字段实例


发布日期:2020年01月21日
 
jdbc方式读取oracle的clob字段实例
可能大家也都习惯了spring和hibernate对CLOB字段的处理在spring中配置clob的oracle处理句柄在hibernate中配置映射类型然后就可以很轻松的以String 的形式处理大字段 今天我做了个需求需要以jdbc的方式从mysql导一些备份数据到oracle正式库就查了一些资料最后写了个例子 首先写个连接数据库的类里面有返回mysq oracle连接的方法

public Connection getConn(String flag){

Connection con=null;

try

{

if(flagequals())

{

ClassforName(oraclejdbcdriverOracleDriver);

con = DriverManagergetConnection(jdbc:oracle:thin:@IP::数据库名字namepassword);

}

if(flagequals())

{

ClassforName(orggjtmmmysqlDriver);

con = DriverManagergetConnection(jdbc:mysql://localhost/数据库名?user=用户名&password=密码&useUnicode=true&characterEncoding=GBK);

}

}

catch(Exception e)

{

eprintStackTrace();

}

return con;

}

public void setData() {

conn = new Conn();

try {

String sqlfrom = select pidntent from <A title=table target=_blank>table</A> p order by pid ;

String sqlinsert = insert into <A title=table target=_blank>table</A> values(??);

con = conngetConn();

stmt = concreateStatement(); //从mysql取出大字段

rs = stmtexecuteQuery(sqlfrom);

con = conngetConn();

PreparedStatement pstmt = conprepareStatement(sqlinsert); //向oracle中插入大字段

int i = ;

while (rsnext()) {

pstmtsetInt( rsgetInt());

pstmtsetClob( <A title=oracle 股票&amp;amp;q=股票&amp;amp;sbb=搜索&amp;amp;sa=搜索&amp;amp;client=pub&amp;amp;forid=&amp;amp;prog=aff&amp;amp;ie=GB&amp;amp;oe=GB&amp;amp;hl=zhCN target=_blank>oracle</A>sqlCLOBempty_lob());

pstmtexecuteUpdate(); //插入时将大字段设为空

thisupdateOne(conrsgetInt()rsgetString()); // 这里调用然后更新这个大字段

}

rsclose(); //关闭相关连接

pstmtclose();

stmtclose();

conclose();

} catch (Exception e) {

eprintStackTrace();

try

{

conrollback();

} catch (Exception e) {

<A title=system target=_blank>system</A>outprintln(回滚出现异常!);

eprintStackTrace();

}

}

}

:该方法实现对应大字段记录的更新

<PRE class=java name=code>public void updateOne(Connection conint id String content) {

String str = select ntent from <A title=table target=_blank>table</A> t where tid= + id+ for update;

try {

// 注意存取操作开始前必须用setAutoCommit(false)取消自动提交否则Oracle将抛出读取违反顺序的错误

consetAutoCommit(false);

stmt = concreateStatement();

ResultSet rs_clob = stmtexecuteQuery(str);

while ( rs_clob next()) {

/* 取出clob数据*/

<A title=oracle 股票&amp;amp;q=股票&amp;amp;sbb=搜索&amp;amp;sa=搜索&amp;amp;client=pub&amp;amp;forid=&amp;amp;prog=aff&amp;amp;ie=GB&amp;amp;oe=GB&amp;amp;hl=zhCN target=_blank>oracle</A>sqlCLOB clob = (oraclesqlCLOB) rs_clob getClob();

/* 向clob中写入数据*/

clobputString( content);

}

stmtclose();

mit();

consetAutoCommit(true);

conclose();

} catch (Exception e) {

eprintStackTrace();

try

{

conrollback();

} catch (Exception e) {

<A title=system target=_blank>system</A>outprintln(回滚出现异常!);

eprintStackTrace();

}

}

}

</PRE>

现在就完成了一行记录的更新

读clob字段以String 的形式返回(当然也可以将读到的内容写入文件大家改一下就可以了)

<PRE class=java name=code>/**

* 读clob字段

* @param con

* @param id

* @return

*/

public String readClob(Connection conint id)

{

String content=;

try

{

consetAutoCommit(false);

stmt=concreateStatement();

ResultSet rs_clob=stmtexecuteQuery(select ntent from <A title=table target=_blank>table</A> t where tid=+id);

<A title=oracle 股票&amp;amp;q=股票&amp;amp;sbb=搜索&amp;amp;sa=搜索&amp;amp;client=pub&amp;amp;forid=&amp;amp;prog=aff&amp;amp;ie=GB&amp;amp;oe=GB&amp;amp;hl=zhCN target=_blank>oracle</A>sqlCLOB contents=null;

while (rs_clobnext())

{ // 取出CLOB对象

contents= (oraclesqlCLOB) rs_clobgetClob();

}

BufferedReader a = new BufferedReader(contentsgetCharacterStream()); //以字符流的方式读入BufferedReader

String str = ;

while ((str = areadLine()) != null) {

content = ncat(str); //最后以String的形式得到

}

mit();

/*

BufferedWriter out = new BufferedWriter(new FileWriter(e:/testtxt));

outwrite(content);//写入文件

outclose();*/

consetAutoCommit(true);

conclose();

}catch(Exception e)

{

<A title=system target=_blank>system</A>outprintln(出现异常);

eprintStackTrace();

try

{

conrollback();

}

catch (Exception e)

{

<A title=system target=_blank>system</A>outprintln(回滚出现异常!);

eprintStackTrace();

}

}

return content;

}

</PRE>

上一篇:各种数据库连接代码

下一篇:Apache Commons DbUtils 快速上手