



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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中国磷酸二铵(DAP)行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国相变材料行业经营模式与发展趋势研究报告
- 2025至2030中国病人隔离围裙行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国男士牛仔上衣行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国生物燃料添加剂行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国牙科二氧化硅粉市场竞争格局与发展战略研究报告
- 2025至2030中国燃气热水器市场行情走势与投融资战略规划分析报告
- 三年级数学因数中间或末尾有零的乘法能力监控试题
- 钢楼梯工程施工组织设计方案
- 2024年(全国教材培训专题系列)素养导向初中地理大单元教学课件
- 安徽省马鞍山市2024-2025学年高一化学下学期期末考试试题
- 分布式能源系统规划
- 云南省昆明市2024-2025学年高一数学下学期期末质量检测试题
- 盐城市东台市2023-2024学年七年级下学期期末地理试题(含答案解析)
- 成都市2022级(2025届)高中毕业班摸底测试(零诊)英语试卷(含答案)
- 北京市怀柔区2023-2024学年八年级下学期期末数学试题
- 会计研究方法智慧树知到期末考试答案章节答案2024年华东交通大学
- 人教版数学小升初冲刺模拟试卷(含答案)
- 公安院校公安专业本专科招生政治考察表
评论
0/150
提交评论