下載本文檔
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版四年級(jí)上冊(cè)數(shù)學(xué)第四單元《三位數(shù)乘兩位數(shù)》測(cè)試卷附完整答案【歷年真題】
- 蘇教版四年級(jí)下冊(cè)數(shù)學(xué)第三單元 三位數(shù)乘兩位數(shù) 測(cè)試卷含完整答案(奪冠)
- 2024年式現(xiàn)代家居裝修租賃合同
- 2024年度醫(yī)療設(shè)備制造與銷售合同
- 加藥遠(yuǎn)程操作監(jiān)控系統(tǒng)設(shè)計(jì)
- 2024年宿舍健身設(shè)施采購(gòu)合同
- 2024年度聯(lián)合營(yíng)銷合同
- 2024年度噸不銹鋼帶打印功能電子地磅秤軟件升級(jí)合同
- 2024年衛(wèi)星導(dǎo)航技術(shù)研發(fā)招投標(biāo)合同
- 2024年實(shí)驗(yàn)室整體設(shè)備采購(gòu)及安裝合同
- 國(guó)開(kāi)(甘肅)2024年春《地域文化(專)》形考任務(wù)1-4終考答案
- 檔案整理及數(shù)字化服務(wù)方案(技術(shù)標(biāo) )
- 大型及分布式光伏電站視頻監(jiān)控典型配置方案V1.0
- 靜電粉末噴涂實(shí)用工藝
- 《十字繡》教學(xué)設(shè)計(jì)及反思
- 橋梁形象進(jìn)度圖
- C站使用說(shuō)明JRC
- 習(xí)作:推薦一個(gè)好地方 推薦ppt課件
- 角的度量 華應(yīng)龍(課堂PPT)
- 公路銑刨機(jī)整機(jī)的設(shè)計(jì)含全套CAD圖紙
- 機(jī)器人學(xué)課程教學(xué)大綱
評(píng)論
0/150
提交評(píng)論