完全解讀JAVA完全控制Oracle中BLOB、CLOB_第1頁(yè)
完全解讀JAVA完全控制Oracle中BLOB、CLOB_第2頁(yè)
完全解讀JAVA完全控制Oracle中BLOB、CLOB_第3頁(yè)
完全解讀JAVA完全控制Oracle中BLOB、CLOB_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.:.; 網(wǎng)絡(luò)上很多關(guān)于JAVA對(duì)Oracle中BLOB、CLOB類型字段的操作闡明,有的不夠全面,有的不夠準(zhǔn)確,甚至有的幾乎就是胡說(shuō)八道。最近的工程正巧用到了這方面的知識(shí),在這里做個(gè)總結(jié)。環(huán)境:Database: Oracle 9iApp Server: BEA Weblogic 8.14表構(gòu)造:CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), BLOBATTR Blob)CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), CLOBATTR Clob)JAVA可以經(jīng)過(guò)JDBC,也可以經(jīng)過(guò)JNDI

2、訪問(wèn)并操作數(shù)據(jù)庫(kù),這兩種方式的詳細(xì)操作存在著一些差別,由于經(jīng)過(guò)App Server的數(shù)據(jù)庫(kù)銜接池JNDI獲得的數(shù)據(jù)庫(kù)銜接提供的java.sql.Blob和java.sql.Clob實(shí)現(xiàn)類與JDBC方式提供的不同,因此在入庫(kù)操作的時(shí)候需求分別對(duì)待;出庫(kù)操作沒(méi)有這種差別,因此不用單獨(dú)對(duì)待。一、BLOB操作1、入庫(kù)1JDBC方式 /經(jīng)過(guò)JDBC獲得數(shù)據(jù)庫(kù)銜接 Class.forName(oracle.jdbc.driver.OracleDriver); Connection con = DriverManager.getConnection(jdbc:oracle:thin:localhost:15

3、21:testdb, test, test); con.setAutoCommit(false); Statement st = con.createStatement(); /插入一個(gè)空對(duì)象empty_blob() st.executeUpdate(insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, thename, empty_blob(); /鎖定數(shù)據(jù)行進(jìn)展更新,留意“for update語(yǔ)句 ResultSet rs = st.executeQuery(select BLOBATTR from TESTBLOB where ID=1

4、 for update); if (rs.next() /得到j(luò)ava.sql.Blob對(duì)象后強(qiáng)迫轉(zhuǎn)換為oracle.sql.BLOB oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(BLOBATTR); OutputStream outStream = blob.getBinaryOutputStream(); /data是傳入的byte數(shù)組,定義:byte data outStream.write(data, 0, data.length); outStream.flush(); outStream.close(); conmit()

5、; con.close();2JNDI方式 /經(jīng)過(guò)JNDI獲得數(shù)據(jù)庫(kù)銜接 Context context = new InitialContext(); ds = (DataSource) context.lookup(ORA_JNDI); Connection con = ds.getConnection(); con.setAutoCommit(false); Statement st = con.createStatement(); /插入一個(gè)空對(duì)象empty_blob() st.executeUpdate(insert into TESTBLOB (ID, NAME, BLOBATTR

6、) values (1, thename, empty_blob(); /鎖定數(shù)據(jù)行進(jìn)展更新,留意“for update語(yǔ)句 ResultSet rs = st.executeQuery(select BLOBATTR from TESTBLOB where ID=1 for update); if (rs.next() /得到j(luò)ava.sql.Blob對(duì)象后強(qiáng)迫轉(zhuǎn)換為weblogic.jdbc.vendor.oracle.OracleThinBlob不同的App Server對(duì)應(yīng)的能夠會(huì)不同 weblogic.jdbc.vendor.oracle.OracleThinBlob blob =

7、(weblogic.jdbc.vendor.oracle.OracleThinBlob) rs.getBlob(BLOBATTR); OutputStream outStream = blob.getBinaryOutputStream(); /data是傳入的byte數(shù)組,定義:byte data outStream.write(data, 0, data.length); outStream.flush(); outStream.close(); conmit(); con.close();2、出庫(kù) /獲得數(shù)據(jù)庫(kù)銜接 Connection con = ConnectionFactory.g

8、etConnection(); con.setAutoCommit(false); Statement st = con.createStatement(); /不需求“for update ResultSet rs = st.executeQuery(select BLOBATTR from TESTBLOB where ID=1); if (rs.next() java.sql.Blob blob = rs.getBlob(BLOBATTR); InputStream inStream = blob.getBinaryStream(); /data是讀出并需求前往的數(shù)據(jù),類型是byte d

9、ata = new byteinput.available(); inStream.read(data); inStream.close(); inStream.close(); conmit(); con.close();二、CLOB操作1、入庫(kù)1JDBC方式 /經(jīng)過(guò)JDBC獲得數(shù)據(jù)庫(kù)銜接 Class.forName(oracle.jdbc.driver.OracleDriver); Connection con = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:testdb, test, test); con.set

10、AutoCommit(false); Statement st = con.createStatement(); /插入一個(gè)空對(duì)象empty_clob() st.executeUpdate(insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, thename, empty_clob(); /鎖定數(shù)據(jù)行進(jìn)展更新,留意“for update語(yǔ)句 ResultSet rs = st.executeQuery(select CLOBATTR from TESTCLOB where ID=1 for update); if (rs.next() /得到

11、java.sql.Clob對(duì)象后強(qiáng)迫轉(zhuǎn)換為oracle.sql.CLOB oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob(CLOBATTR); Writer outStream = clob.getCharacterOutputStream(); /data是傳入的字符串,定義:String data char c = data.toCharArray(); outStream.write(c, 0, c.length); outStream.flush(); outStream.close(); conmit(); con.close(

12、);2JNDI方式 /經(jīng)過(guò)JNDI獲得數(shù)據(jù)庫(kù)銜接 Context context = new InitialContext(); ds = (DataSource) context.lookup(ORA_JNDI); Connection con = ds.getConnection(); con.setAutoCommit(false); Statement st = con.createStatement(); /插入一個(gè)空對(duì)象empty_clob() st.executeUpdate(insert into TESTCLOB (ID, NAME, CLOBATTR) values (1,

13、 thename, empty_clob(); /鎖定數(shù)據(jù)行進(jìn)展更新,留意“for update語(yǔ)句 ResultSet rs = st.executeQuery(select CLOBATTR from TESTCLOB where ID=1 for update); if (rs.next() /得到j(luò)ava.sql.Clob對(duì)象后強(qiáng)迫轉(zhuǎn)換為weblogic.jdbc.vendor.oracle.OracleThinClob不同的App Server對(duì)應(yīng)的能夠會(huì)不同 weblogic.jdbc.vendor.oracle.OracleThinClob clob = (weblogic.jd

14、bc.vendor.oracle.OracleThinClob) rs.getClob(CLOBATTR); Writer outStream = clob.getCharacterOutputStream(); /data是傳入的字符串,定義:String data char c = data.toCharArray(); outStream.write(c, 0, c.length); outStream.flush(); outStream.close(); conmit(); con.close();2、出庫(kù) /獲得數(shù)據(jù)庫(kù)銜接 Connection con = ConnectionFa

15、ctory.getConnection(); 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); Reader inStream = clob.getCharacterStream(); char c = new char(int) clob.length(); inStream.read(c); /data是讀出并需求前往的數(shù)據(jù),類型是String data = new

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論