Oracle 10g 中用 setString方法寫CLOB欄位

來源:互聯網
上載者:User
 

本文主要講解

1、在Oracle 10g中的新的,方便處理Clob 大欄位的 JDBC Api

2、以及一個java 中處理大欄位的一個樣本程式

A、什麼是Clob

LOBs (Large Ojbects) 用來儲存沒有結構的資料,比如大常值內容,影像檔,或是視頻等等。

·Oracle裡有3種LOB,BLOB(Binary LOB),CLOB(Character LOB),和NCLOB(National Character LOB).

·每一個LOB對象會儲存成為一個系統檔案,被稱為BFILEs.

B、處理Clob

在10g之前Oracle
提供了從java.sql.CLOB擴充的oracle.sql.CLOB對象來處理。從10g以後Oracle的jdbc加入了新的
API,OraclePreparedStatement增加了新的
Api.OraclePreparedStatement.setStringForClob(),這個方法沒有

OraclePreparedStatement.setString()這個方法的32765的長度限制。正如你想象的一樣,OraclePreparedStatement.getString(),這個方法照舊,還是一樣可以從CLOB欄位取得完整的內容。

C、樣本程式

方法一:標準的jdbc api

注意,前邊提到的 setStringForClob 方法,在標準的 jdbc Api 裡面是沒有,這裡需要把一個 SetBigStringTryClob 屬性設定到資料庫連接,這樣setString()這個方法就會試圖用CLOB方式來處setString.

a、準備資料庫

CREATE TABLE clob_tab (clob_col CLOB);

b、建立資料庫連接

import java.sql.Connection;

import java.sql.DriverManager;

import oracle.jdbc.OracleDriver;

import java.util.Properties;

..........

// 定義資料庫連接變數

String url = "jdbc:oracle:thin:@localhost:1521:orcl";

String user = "scott";

String password = "tiger";

// 準備建立資料庫連接的屬性

Properties props = new Properties();

props.put("user", user );

props.put("password", password);

props.put("SetBigStringTryClob", "true");

//注意,這是有必要的

// 載入資料庫驅動

DriverManager.registerDriver(new OracleDriver());

// 獲得資料庫連接

Connection conn = DriverManager.getConnection( this.url, this.props );

c、小試:

PreparedStatement pstmt = conn.prepareStatement(

"INSERT INTO clob_tab VALUES(?)");

//讀入大文本

String str = this.readFile("bigFile.txt");

//用setString方法來把大文本寫入Clob欄位

//要確保在 SetBigStringTryClob 屬性已經設定

pstmt.setString(1, str);

pstmt.executeUpdate();

方法二:非jdbc標準,Oracle api方式

import java.sql.*;

import java.io.*;

import java.util.*;

import oracle.jdbc.*;

import oracle.jdbc.pool.*;

..........

// sql

String sql = "INSERT INTO clob_tab VALUES(?)";

// 讀入大文本(大於 32765 位元組).

//readFile() 只是一個方法用來讀取文本,返回字串

String str = this.readFile("bigFile.txt");

// 建立 OraclePreparedStatement , 注意比較這裡

opstmt = (OraclePreparedStatement)conn.prepareStatement(sql);

// 調用 setStringForClob 方法來寫入Clob

opstmt.setStringForClob(1,str);

// 執行

opstmt.executeUpdate();

...........

D、用getString()讀取Clob

ResultSet.getString()方法並沒有 32765 位元組的限制,以下就是讀取CLOB欄位的方法

.....

PreparedStatement pstmt = null;

ResultSet rset = null;

.......

// 執行Sql,返回結果集

String sqlCall = "SELECT clob_col FROM clob_tab";

pstmt= conn.prepareStatement(sqlCall);

rset = pstmt.executeQuery();

String clobVal = null;

// 讀取CLOB欄位

while (rset.next()) {

clobVal = rset.getString(1);

System.out.println("CLOB length: "+clobVal.length());

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.