Java對Oracle中Clob類型資料的讀取和寫入

來源:互聯網
上載者:User

Java對Oracle中Clob資料類型是不能夠直接插入的,但是可以通過流的形式對clob類型資料寫入或者讀取,網上代碼並不算特別多,講的也不是很清楚,我對網上資料進行了整理和總結,具體看代碼:

寫入clob資料

import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class TestClobIn {
  public static void main(String args[]){
  String data="this is a long passage!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";
  Writer outStream = null;
 //通過JDBC獲得資料庫連接
  try {
  Class.forName("oracle.jdbc.driver.OracleDriver");
  Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ewins", "scott", "tiger");
  con.setAutoCommit(false);
  Statement st = con.createStatement();
  //插入一個Null 物件empty_clob(),這個是必須的
  st.executeUpdate("insert into TESTCLOB(ID, NAME, CLOBATTR)values(2,'thename', empty_clob())");
  //鎖定資料行進行更新,注意“for update”語句,這裡不用for update鎖定不可以插入clob
  ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");
  if (rs.next())
  {
  //得到java.sql.Clob對象後強制轉換為oracle.sql.CLOB
  oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");
  outStream = clob.getCharacterOutputStream();
  //data是傳入的字串,定義:String data
  char[] c = data.toCharArray();
  outStream.write(c, 0, c.length);
  }
  outStream.flush();
  outStream.close();
  con.commit();
  con.close();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  }
}

讀取clob資料

import java.io.InputStream;
import java.io.Reader;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;


public class TestClobOut {
  public static void main(String args[]){
  String data;
  Reader inStream=null;
  //獲得資料庫連接
  Connection con = ConnectionFactory.getConnection();//ConnectionFactory類是另外定義的,不必糾結
  con.setAutoCommit(false);
  Statement st = con.createStatement();
  //不需要“for update”
  ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");
  if (rs.next())
  {
  java.sql.Clob clob = rs.getClob("CLOBATTR");
  inStream = clob.getCharacterStream();
  char[] c = new char[(int) clob.length()];
  inStream.read(c);
  //data是讀出並需要返回的資料,類型是String
  data = new String(c);
  inStream.close();
  }
  inStream.close();
  con.commit();
  con.close();
  }
}

對比我們可以看出,無論出庫入庫,都要對clob資料類型進行查詢操作,寫入clob資料相對來說更複雜一點,需要先插入empty_clob()值,然後使用帶“for update”的查詢語句鎖定更新行,最後執行個體化輸出資料流並對clob類型欄位資料進行寫入操作;讀取clob相對輕鬆一些,利用getCharacterStream方法得到輸入資料流,從資料庫中clob欄位下,直接將資料讀取出來。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.