熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

jdbc方式讀取oracle的clob字段實例

2013-11-23 19:04:24  來源: Java核心技術 
          可能大家也都習慣了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>


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26226.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.