- 浏览: 291926 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
86614009:
如何在service层,如何获取绑定到当前线程的entitna ...
使用spring的OpenEntityManagerInView -
yajunyajun2011:
好帖子 怎么没人顶呢
Java 正则表达式最大,最小匹配问题 -
xtuali:
能说明一下,你的nutch是哪个版本的吗?谢谢!
搜索引擎Nutch源代码研究之一 网页抓取(1) -
dongmusic:
需要学习这么多的东西,吐血中...
如何提高Java开发能力 -
jiminsc:
cool
LDAP 验证、添加、修改、删除(转)
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://qq772708707.blog.51cto.com/259758/79253
|
先来看看两种LOB类型的主要区别:
CLOB 表示Character LOB (字符LOB) 它可以存储大量的字符数据。 BLOB表示 Binary LOB(二进制LOB)。此数据类型的列可以存储大型二进制对象,如图形、视频剪辑和声音文件等。 基本上我们可以得出这样的结论: 文本文件我们既可以使用BLOB也可以使用CLOB,二进制文件的存储我们只能使用BLOB类型. 好,下面通过代码示例描述如何读取和写入LOB类型的字段: 1. 先建一张表,具有三个字段: CREATE TABLE "ATTACHMENT" ( "ID" VARCHAR2(10) NOT NULL, "MYCLOB" CLOB, "MYBLOB" BLOB, PRIMARY KEY("ID")); 2. 准备两个文件用来存入数据库: c:/Test.java 用来代表文本文件 C:/xx.jar 用来代表二进制数据 3. 存储文本信息到CLOB字段中 Connection conn = DBUtil.getConnection(); conn.setAutoCommit(false); Statement stmt = conn.createStatement(); //先初始化CLOB字段,此处为必须的操作,否则后面会产生空指针异常 String initSql = "UPDATE ATTACHMENT SET MYCLOB=EMPTY_CLOB() WHERE ID=1"; //读取CLOB字段 String updateSql = "SELECT MYCLOB FROM ATTACHMENT WHERE ID=1"; stmt.executeUpdate(initSql); ResultSet rs = stmt.executeQuery(updateSql); if (rs.next()) { CLOB clob = (CLOB) rs.getClob(1); //获取CLOB字段内容并转换为 oracle.sql.CLOB类型 //获取CLOB的输出流 Writer os = clob.getCharacterOutputStream(); //读取文本文件 BufferedReader br = new BufferedReader(new FileReader(new File( "c:/Test.java"))); String line = br.readLine(); StringBuffer buffer = new StringBuffer(); while (line != null) { buffer.append(line); line = br.readLine(); } os.write(buffer.toString()); os.flush(); br.close(); os.close(); conn.commit(); conn.close(); } System.out.println("Saved"); 在SQLPlus中测试一下文件有没有存入到数据库中, SQL> SQL> SELECT DBMS_LOB.GETLENGTH(MYCLOB) FROM ATTACHMENT; 显示结果如下: DBMS_LOB.GETLENGTH(MYCLOB) -------------------------- 177 这表明文件已经写入到这个MYCLOB字段中,如果没有存入的话,SQLPlus中不会显示任何数字(包括零也不会被显示), 现在可以进行下一步操作了 4. 读取CLOB字段中的文本信息 Connection conn = DBUtil.getConnection(); Statement st = conn.createStatement(); PreparedStatement preparedStatement = conn.prepareStatement("SELECT MYCLOB FROM ATTACHMENT WHERE ID=1"); ResultSet rs = preparedStatement.executeQuery(); if (rs.next()) { //获取CLOB字段信息 CLOB clob = (CLOB)rs.getClob("MYCLOB"); BufferedReader br = new BufferedReader(clob.getCharacterStream()); //创建输出流 BufferedWriter out = new BufferedWriter(new FileWriter("C:/tttt.txt")); String line = br.readLine(); while (line != null) { out.write(line); System.out.println(line); line = br.readLine(); out.flush(); } out.close(); br.close(); } rs.close(); st.close(); conn.close(); 5. 写入二进制信息到BLOB字段 conn = DBUtil.getConnection(); // 设置不自动提交 conn.setAutoCommit(false); // 创建数据库操作语句 statement = conn.createStatement(); // 定义SQL语句 statement.executeUpdate("UPDATE ATTACHMENT SET MYBLOB = EMPTY_BLOB() WHERE ID=1"); String strSQL = "SELECT MYBLOB FROM ATTACHMENT WHERE ROWNUM = 1 FOR UPDATE"; resultset = statement.executeQuery(strSQL); BLOB contents = null; while (resultset.next()) { // 取出BLOB对象 contents = (oracle.sql.BLOB) resultset.getBlob(1); } OutputStream out = contents.getBinaryOutputStream(); FileInputStream in = new FileInputStream(new File("c:/XX.jar")); //将输出流和输入流对转 FileUtil.copy(in, out); out.close(); in.close(); // 数据库提交 conn.commit(); conn.close(); 同样,这里我们也在SQLPlus中测试一下BLOB字段中是否已经含有数据: SQL> SQL> SELECT DBMS_LOB.GETLENGTH(MYBLOB) FROM ATTACHMENT; 显示结果如下: DBMS_LOB.GETLENGTH(MYBLOB) -------------------------- 211 表明已经存入数据,数据的大小是21.1k, 现在可以进行读取操作了 6. 读取BLOB字段中内容并存储到一个文件中 Connection conn = DBUtil.getConnection(); conn.setAutoCommit(false); PreparedStatement preparedStatement = conn .prepareStatement("SELECT DATA FROM ATTACH WHERE ROWNUM=1"); ResultSet rs = preparedStatement.executeQuery(); if (rs.next()) { Blob blob = rs.getBlob(1); if (blob != null) { InputStream is = ((BLOB) blob).getBinaryStream(); // ((CLOB) clob).getCharaterStream(); FileOutputStream fos = new FileOutputStream(new File( "c:/abc.jar")); FileUtil.copy(is, fos); fos.close(); is.close(); } } rs.close(); preparedStatement.close(); conn.close(); 输出: c盘的根目录下应该出现了一个abc.jar 的文件, 你可以根据字节数和xx.jar比较一下,应该完全相同. 上述步骤是使用了示例代码展示了如何操作Oracle中LOB字段类型,如果需要本文中的全部源代码请发送邮件到info@javabiz.cn 如需转载请注明本文来自程式先锋网站 [url]http://www.javabiz.cn[/url] 本文出自 “程式先锋” 博客,请务必保留此出处http://qq772708707.blog.51cto.com/259758/79253 本文出自 51CTO.COM技术博客 |
发表评论
-
文件存储到 Oracle 的存储过程用的外部BLOB的方式
2012-04-25 17:24 907一个存储图片文件的过程,任何开发工具都可以通过调用过程把图片文 ... -
Linux 安装 Mysql
2012-03-06 16:37 781一、引言 想使用Linux已经很长时间了,由于没有硬性任 ... -
sql查看oracle tablespace剩余空间
2012-01-01 10:46 1667select a.TABLESPACE_NAME, a.BYT ... -
oracle报错ID(一)
2011-12-06 08:55 1945ORA-00001: 违反唯一约束 ... -
ORACLE错误一览表
2011-06-03 16:52 730ORA-00001: 违反唯一约束 ... -
Oracle 使用总结(收藏于论坛)
2011-05-08 20:20 748一.Oracle数据库中常用的 ... -
oracle中scott/tiger、sys、SYSDBA、system都是什么用
2011-03-07 21:33 1232scott 是个演示用户,是让你学习ORACLE用的 SYS ... -
Oracle 一次插入多条记录的方法
2011-03-04 13:01 1147原来一次插入多条记录是用这个方法,需要用到dual 表, ... -
为Oracle字段建索引
2011-03-04 09:55 1248一、查看表中所有的索引,注意表名必须要大写SQL> se ... -
查看及删除oracle序列的方法
2011-03-04 09:37 1028一、查看所有序列 select * from u ... -
Oracle 9i主键自增长
2011-03-02 20:50 835<!--StartFragment --> ... -
Oracle连接池
2011-03-01 18:00 1164Oracle连接池 public class Conn ... -
jdbc连接数据库操作
2011-02-28 13:27 845好久没有操作数据库,今天上午连接Oracle的,竟然不知道怎么 ... -
常用的Oracle命令
2011-01-14 16:33 1049ORACLE数据库维护 01. ORACLE数 ... -
oracle的blob,clob的读写
2010-10-26 19:32 1118JDBC驱动程序的类型: JDBC-ODBC桥;部分本地API ... -
将文档以BLOB类型存入Oracle数据库中
2010-10-26 16:06 1232头痛了两天的问题终于得到解决了,特此写下(原创): c ... -
向oracle中插入BLOB对象
2010-10-25 20:19 1509package oracle.otnsamples.jdbc. ... -
How To Handle CLOBs Easily in JDBC?
2010-10-24 11:07 845How To Handle CLOBs Easily in ... -
Blob、InputStream、byte 互转
2010-10-24 10:55 1306来自 sukyle的专栏 在我们的程序开发当中,经常会用到j ... -
转:java操纵主要数据库的lob类型数据
2010-10-24 10:54 880文章分类:Java编程 Clob和blob的操作主要分为 ...
相关推荐
Oracle 中使用 JDBC 读写 CLOB 和 BLOB 字段 在 Oracle 中,使用 JDBC 读写 CLOB(Character Large ...在 Oracle 中使用 JDBC 读写 CLOB 和 BLOB 字段需要注意数据的大小和类型,并选择合适的方法来进行读写操作。
JDBC读写Oracle的CLOB字段
为了将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中,我们需要使用Java 语言和 JDBC 驱动程序。下面是一个示例代码,演示如何将 SQL Server 中的 Image 类型数据导出到 Oracle 的 CLOB 字段中: ...
在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...
在示例中,我们设置占位符的值,然后执行插入操作,将本地文件的内容写入到CLOB和BLOB字段。 在读取数据时,我们使用`ResultSet`对象来获取查询结果。对于CLOB字段,我们通过`ResultSet.getClob()`方法获取`Clob`...
Oracle JDBC驱动提供了一些特定的方法,如`OracleClob`和`OracleBlob`,可以直接操作Clob和Blob。这些类提供了更底层的访问接口,例如`createTemporary()`,可以创建临时的Clob或Blob,用于处理一次性数据。 5. **...
这篇文档将详细阐述如何在JDBC中有效地读取和操作Oracle数据库的CLOB字段,并将其转换为String类型。 首先,理解CLOB对象的特性是关键。CLOB是一种BLOB(Binary Large Object)的变种,专用于存储字符数据。在JDBC...
其他步骤相同,但是在获取java.sql.Blob对象后需要强制转换为weblogic.jdbc.vendor.oracle.OracleThinBlob对象,以便使用getBinaryOutputStream()方法将数据写入BLOB字段。 二、CLOB操作 CLOB操作与BLOB操作类似,...
在Java的数据库操作中,`CLOB...总之,无论是使用JDBC还是Hibernate,处理`CLOB`和`BLOB`字段都需要特殊的处理方式,尤其是在Oracle等数据库中。了解这些处理方法对于开发涉及大数据量文本和二进制数据的应用至关重要。
最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了。 blob字段直接用 select * from table_name where column like ‘%%'查找的时候是不能实现...
在实体类中,你可以定义一个Blob类型的属性来表示数据库中的Blob字段: ```java @Entity public class MediaEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Lob ...
对于CLOB和BLOB字段,Oracle JDBC驱动提供了`oracle.jdbc.driver.OracleClob`和`oracle.jdbc.driver.OracleBlob`类,它们实现了Java的标准接口`java.sql.Clob`和`java.sql.Blob`。这两个接口提供了读取和写入大数据...
Spring和Hibernate框架结合使用可以有效地进行CLOB字段的操作。以下是实现这一功能的关键步骤和注意事项: 1. **配置SessionFactory** 在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`...
在Java的JDBC环境中,处理Oracle数据库中的CLOB...以上是处理Oracle CLOB字段的关键知识点,理解这些概念对于高效地使用JDBC操作大文本数据至关重要。在实际项目中,还需要考虑性能优化、错误处理和资源管理等细节。
在使用 Java 进行 Oracle 数据库操作时,理解 Blob 和 Clob 类型及其操作方法至关重要。通过合理选择 JDBC 版本和适配容器特性,可以有效地管理大容量数据,提高应用程序的性能和稳定性。此外,还需要关注不同容器...
在Oracle数据库中,CLOB(Character Large Object)和BLOB(Binary Large Object)是用来存储大量文本数据和二进制数据的特殊数据类型。CLOB用于存储非结构化的文本信息,如XML文档或长篇文章,而BLOB则适用于图像、...
在实际应用中,"batchinsert"可能是一个包含示例代码的文件,展示了如何使用JDBC批量插入Blob字段的具体实现。通过研究和理解这些代码,你可以更好地掌握批量插入Blob数据的技巧,并根据自己的需求进行调整和优化。 ...