完全解读JAVA完全控制Oracle中BLOB、CLOB_第1页
完全解读JAVA完全控制Oracle中BLOB、CLOB_第2页
完全解读JAVA完全控制Oracle中BLOB、CLOB_第3页
完全解读JAVA完全控制Oracle中BLOB、CLOB_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.:.; 网络上很多关于JAVA对Oracle中BLOB、CLOB类型字段的操作阐明,有的不够全面,有的不够准确,甚至有的几乎就是胡说八道。最近的工程正巧用到了这方面的知识,在这里做个总结。环境:Database: Oracle 9iApp Server: BEA Weblogic 8.14表构造:CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), BLOBATTR Blob)CREATE TABLE TESTBLOB (ID Int, NAME Varchar2(20), CLOBATTR Clob)JAVA可以经过JDBC,也可以经过JNDI

2、访问并操作数据库,这两种方式的详细操作存在着一些差别,由于经过App Server的数据库衔接池JNDI获得的数据库衔接提供的java.sql.Blob和java.sql.Clob实现类与JDBC方式提供的不同,因此在入库操作的时候需求分别对待;出库操作没有这种差别,因此不用单独对待。一、BLOB操作1、入库1JDBC方式 /经过JDBC获得数据库衔接 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(); /插入一个空对象empty_blob() st.executeUpdate(insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, thename, empty_blob(); /锁定数据行进展更新,留意“for update语句 ResultSet rs = st.executeQuery(select BLOBATTR from TESTBLOB where ID=1

4、 for update); if (rs.next() /得到java.sql.Blob对象后强迫转换为oracle.sql.BLOB oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(BLOBATTR); OutputStream outStream = blob.getBinaryOutputStream(); /data是传入的byte数组,定义:byte data outStream.write(data, 0, data.length); outStream.flush(); outStream.close(); conmit()

5、; con.close();2JNDI方式 /经过JNDI获得数据库衔接 Context context = new InitialContext(); ds = (DataSource) context.lookup(ORA_JNDI); Connection con = ds.getConnection(); con.setAutoCommit(false); Statement st = con.createStatement(); /插入一个空对象empty_blob() st.executeUpdate(insert into TESTBLOB (ID, NAME, BLOBATTR

6、) values (1, thename, empty_blob(); /锁定数据行进展更新,留意“for update语句 ResultSet rs = st.executeQuery(select BLOBATTR from TESTBLOB where ID=1 for update); if (rs.next() /得到java.sql.Blob对象后强迫转换为weblogic.jdbc.vendor.oracle.OracleThinBlob不同的App Server对应的能够会不同 weblogic.jdbc.vendor.oracle.OracleThinBlob blob =

7、(weblogic.jdbc.vendor.oracle.OracleThinBlob) rs.getBlob(BLOBATTR); OutputStream outStream = blob.getBinaryOutputStream(); /data是传入的byte数组,定义:byte data outStream.write(data, 0, data.length); outStream.flush(); outStream.close(); conmit(); con.close();2、出库 /获得数据库衔接 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是读出并需求前往的数据,类型是byte d

9、ata = new byteinput.available(); inStream.read(data); inStream.close(); inStream.close(); conmit(); con.close();二、CLOB操作1、入库1JDBC方式 /经过JDBC获得数据库衔接 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(); /插入一个空对象empty_clob() st.executeUpdate(insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, thename, empty_clob(); /锁定数据行进展更新,留意“for update语句 ResultSet rs = st.executeQuery(select CLOBATTR from TESTCLOB where ID=1 for update); if (rs.next() /得到

11、java.sql.Clob对象后强迫转换为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方式 /经过JNDI获得数据库衔接 Context context = new InitialContext(); ds = (DataSource) context.lookup(ORA_JNDI); Connection con = ds.getConnection(); con.setAutoCommit(false); Statement st = con.createStatement(); /插入一个空对象empty_clob() st.executeUpdate(insert into TESTCLOB (ID, NAME, CLOBATTR) values (1,

13、 thename, empty_clob(); /锁定数据行进展更新,留意“for update语句 ResultSet rs = st.executeQuery(select CLOBATTR from TESTCLOB where ID=1 for update); if (rs.next() /得到java.sql.Clob对象后强迫转换为weblogic.jdbc.vendor.oracle.OracleThinClob不同的App Server对应的能够会不同 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、出库 /获得数据库衔接 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是读出并需求前往的数据,类型是String data = new

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论