



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 盆装蔬菜售卖合同协议
- 生鲜超市转让合同协议
- 2025至2030年中国端子台组装机数据监测研究报告
- 2025至2030年中国电批扭力计数据监测研究报告
- 2025至2030年中国玩具用灯泡数据监测研究报告
- 2025至2030年中国牙片鱼数据监测研究报告
- 2025至2030年中国混合型聚氨酯材料数据监测研究报告
- 2025至2030年中国油漆滚筒刷数据监测研究报告
- 2025至2030年中国手持式十一波段光源数据监测研究报告
- 2025至2030年中国复合内外滑剂数据监测研究报告
- 2023年海南省财金集团有限公司招聘笔试模拟试题及答案解析
- 耳聋与人工耳蜗植入术课件
- 公司奖项申请表(个人)
- 三年级上册语文阅读同步扩展课件-第十五讲 童话寓言的阅读技巧(共14张PPT)-人教(部编版)
- 机油滤清器工作原理剖析
- 执行异议及复议课件
- 工程施工资源配置计划施工资源配置计划
- 高中美术教案3-12地域的永恒魅力1
- 安全生产管理组织机构设置图
- 高考政治思维导图
- 一带一路国家风光资源评估报告
评论
0/150
提交评论