全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
网络上很多关于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访问并操作数据库,这两种方式的具体操作存在着一些差异,由于通过App Server的数据库连接池JNDI获得的数据库连接提供的java.sql.Blob和java.sql.Clob实现类与JDBC方式提供的不同,因此在入库操作的时候需要分别对待;出库操作没有这种差异,因此不用单独对待。一、BLOB操作1、入库(1)JDBC方式 /通过JDBC获得数据库连接 Class.forName(oracle.jdbc.driver.OracleDriver); Connection con = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521: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 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(); mit(); con.close();(2)JNDI方式 /通过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) 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 = (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(); mit(); con.close();2、出库 /获得数据库连接 Connection con = ConnectionFactory.getConnection(); 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 data = new byteinput.available(); inStream.read(data); inStream.close(); inStream.close(); mit(); con.close();二、CLOB操作1、入库(1)JDBC方式 /通过JDBC获得数据库连接 Class.forName(oracle.jdbc.driver.OracleDriver); Connection con = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:testdb, test, test); con.setAutoCommit(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() /得到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(); mit(); con.close();(2)JNDI方式 /通过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, 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.jdbc.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(); mit(); con.close();2、出库 /获得数据库连接 Connection con = ConnectionFactory.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 St
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年汕头市濠江区保安员招聘考试题库附答案解析题库大全
- 2025年二级建造师《矿业工程管理与实务》真题解析版
- 2022年国家电网招聘之人力资源类能力测试试卷B卷附答案
- 2025年河北省邯郸市峰峰矿区辅警招聘考试题库附答案解析
- 2025年日喀则地区谢通门县辅警招聘考试题库附答案解析
- 2025年锦州市辅警招聘考试题库附答案解析
- 2025年辽阳市白塔区辅警招聘考试题库附答案解析
- 用户隐私保护策略-第1篇-洞察与解读
- 云服务弹性优化-洞察与解读
- 软件组件溯源-洞察与解读
- 2025年郑州水务集团有限公司招聘80人笔试模拟试卷带答案解析
- 生猪屠宰兽医卫生检验人员理论考试题库及答案
- 安全教育让孩子们健康快乐地成长
- 南京汤山地质公园景观设计
- 脊髓炎护理业务查房
- 国家开放大学学生成绩单
- 完整版全国行政区域身份证代码表(EXCEL版)TextMarkTextMark
- 基于CA6150普通车床的数控化改造
- 脑的动脉课件
- 离子的占位晶体磁晶各向异性课件
- 13.Arnold(阿诺德)渲染器
评论
0/150
提交评论