- 浏览: 39327 次
- 性别:
- 来自: 北京
文章分类
最新评论
在Java中使用Oracle blob
Oracle中的lob (Large Object)可以存储非常大的数据(可能是4GB),这样就可以通过将文件或其它任何对象序列化成字节输出流(OutputStream)后写入数据库,之后使用字节输入流(InputStream)将数据读出然后反序列化为原始文件或对象。操作时需要使用oracle的JDBC包,它扩展了sun的JDBC包中的Blob对象。同时需要注意一些细节。下面的代码演示如何使用blob(实例中需要Oracle的JDBC包)。
1import oracle.jdbc.OracleResultSet; // 使用Oracle的ResultSet对象
2import oracle.sql.BLOB; // 使用Oracle的BLOB对象,而不是sun的Blob
3
4
5
6try{
7 Connection conn=<数据库连接>;
8 File file=<存入数据库的文件对象>;
9 conn.setAutoCommit(false); // 取消Connection对象的auto commit属性
10 String file_name=file.getName();
11
12 // 数据库中有一个item表,其中的file_name (varchar2)存储文件名,file_blob (blob)存储文件对象
13 String sql="INSERT INTO item (file_name,file_blob) VALUES ('" + file_name + "',EMPTY_BLOB())"; // 使用“EMPTY_BLOB()“成生一个空blob
14 Statement stmt=conn.createStatement();
15 int count=stmt.executeUpdate(sql);
16
17 sql="SELECT file_blob FROM item WHERE iid='" + iid + "' FOR UPDATE"; // 使用“FOR UPDATE”得到表的写锁
18 ResultSet rs=stmt.executeQuery(sql);
19 rs.next();
20 BLOB blob=((OracleResultSet)rs).getBLOB("file_blob"); // 得到BLOB对象
21 OutputStream out=blob.getBinaryOutputStream(); // 建立输出流
22 InputStream in=new FileInputStream(file); // 建立输入流
23 int size=blob.getBufferSize();
24 byte[] buffer=new byte[size]; // 建立缓冲区
25 int len;
26 while((len=in.read(buffer)) != -1)
27 out.write(buffer,0,len);
28 in.close();
29 out.close();
30
31 conn.commit();
32}
33catch(Exception ex){
34 try{
35 conn.rollback();
36 }
37 catch(SQLException sqle){
38 System.err.println(sqle.getMessage());
39 }
40}
41
42
2import oracle.sql.BLOB; // 使用Oracle的BLOB对象,而不是sun的Blob
3
4
5
6try{
7 Connection conn=<数据库连接>;
8 File file=<存入数据库的文件对象>;
9 conn.setAutoCommit(false); // 取消Connection对象的auto commit属性
10 String file_name=file.getName();
11
12 // 数据库中有一个item表,其中的file_name (varchar2)存储文件名,file_blob (blob)存储文件对象
13 String sql="INSERT INTO item (file_name,file_blob) VALUES ('" + file_name + "',EMPTY_BLOB())"; // 使用“EMPTY_BLOB()“成生一个空blob
14 Statement stmt=conn.createStatement();
15 int count=stmt.executeUpdate(sql);
16
17 sql="SELECT file_blob FROM item WHERE iid='" + iid + "' FOR UPDATE"; // 使用“FOR UPDATE”得到表的写锁
18 ResultSet rs=stmt.executeQuery(sql);
19 rs.next();
20 BLOB blob=((OracleResultSet)rs).getBLOB("file_blob"); // 得到BLOB对象
21 OutputStream out=blob.getBinaryOutputStream(); // 建立输出流
22 InputStream in=new FileInputStream(file); // 建立输入流
23 int size=blob.getBufferSize();
24 byte[] buffer=new byte[size]; // 建立缓冲区
25 int len;
26 while((len=in.read(buffer)) != -1)
27 out.write(buffer,0,len);
28 in.close();
29 out.close();
30
31 conn.commit();
32}
33catch(Exception ex){
34 try{
35 conn.rollback();
36 }
37 catch(SQLException sqle){
38 System.err.println(sqle.getMessage());
39 }
40}
41
42
如果要读出文件的话只需调用BLOB的getBinaryStream()生成一个输入流,再写入一个文件就行了。
发表评论
-
java.util.StringTokenization
2005-02-13 22:29 642今天室友老七做数据库大作业,其中要实现一个功能,就是输入一个以 ... -
JBuilder 2005中的Servlet mapping
2005-02-13 22:30 699使用JB进行Servlet好像很方便的样子,但是servlet ... -
static与final变量
2005-08-04 12:27 745一、illegal forward refrence 前天写一 ... -
使用策略模式(Strategy)实现多关键字排序
2005-08-04 12:37 792“策略模式”的出现,是为了提供一套相互之间可灵活替换的算法, ... -
Alloy
2005-08-04 13:09 659Alloy look and feel(http:// ... -
IDEA
2005-08-04 13:11 923今天在TSS上看到IntelliJ的IDEA 5.0终于rel ... -
原型模式(Prototype)
2005-08-05 10:54 742一、概述 原型模式属于对象创建模式,通过给出一个原型对象来指明 ... -
IDEA破解过程
2005-08-05 19:11 1805开场白就不说了,直接切入正题吧。本破解的前提是安装了IDEA ... -
适配器模式(Adapter)
2005-08-06 19:39 620一、概述 类的适配器模式把被适配的类的API转换成为目标类的A ... -
A beginners guide to Dependency Injection [转载自TSS]
2005-08-08 22:30 817Scope This article presents a h ... -
Alloy破解过程
2005-08-09 15:42 8691package com.incors.plaf. ... -
接口与Object类的关系?
2005-08-19 13:53 1108今天凌晨coding的时候发现一个很有趣的现象。“Object ... -
缺省适配器模式(Default Adapter)
2005-09-06 12:01 780一、概述 当不需要全部实现适配器接口提供的方法时,可先设计一个 ... -
Object Modeling Strategies (I)
2005-09-08 10:12 591Activities and model components ... -
Joshua Bloch咏Tiger诗八首
2005-09-08 16:59 839“Ease of Development”是J2SE 1.5的 ... -
James Gosling
2005-09-14 22:01 771今天是Java China 2005的最后一天,下午没有去各个 ... -
Object Modeling Strategies (II)
2005-09-19 15:23 623Str#1d. "Invest an Hour&qu ... -
Object Modeling Strategies (III)
2005-09-19 15:26 564Identifying system purpose and ... -
Tomcat 5.5.9 不支持switch(<enum>)?
2005-09-19 18:51 811ServiceExceptionType: package p ... -
“软件危机”时总结的坏的编程习惯——我们是否依旧守着古风?
2005-10-09 14:23 7311、乱用GOTO语句(上下跳转看起来非常方便) 2、大量使用 ...
相关推荐
1. **直接在HTML页面中显示**:可以在HTML页面中使用`<img>`标签直接引用图片数据。 2. **通过Servlet返回图片数据**:在JSP页面中调用Servlet返回图片数据,并在页面上显示。 以下是一个简单的示例,展示如何在JSP...
在IT领域,尤其是在Java开发与Oracle数据库交互的过程中,处理BLOB(Binary Large Object)类型字段是一项常见且重要的任务。BLOB字段主要用于存储大量的二进制数据,如图像、音频、视频或任何其他非文本格式的数据...
1. 在 JSP 页面中使用 Struts 的文件上传组件 `<html:file property="drawingFile"/>` 来上传大对象。 2. 在 Action 中将传入的 ActionForm 中的文件字段赋给 VO 值对象,并调用业务代理类的上传方法。 3. 在业务...
在Java中,可以使用`ResultSet.getBinaryStream()`方法读取BLOB流,然后将其写入文件: ```java File outputFile = new File("<output_path>"); FileOutputStream out = new FileOutputStream(outputFile); ...
指定文件夹下的所有文件上传至oracle的blob字段,java实现
public void testInsertToDB(String path) { //get last file name by time String fileName = ""; try { fileName = InputStreamHelp.newInstance().getLastFilename(path); LogHelp.getLogger().debug(...
Oracle数据库在存储大对象(BLOB)数据时,提供了高效且灵活的方式,使得二进制数据如图片、文档等能够安全地保存在数据库中。批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将...
更新BLOB数据的过程与插入类似,只是在UPDATE语句中使用setBlob()方法: ```java File updatedImageFile = new File("updatedImage.jpg"); FileInputStream updatedFis = new FileInputStream(updatedImageFile); ...
视频第六部分共七部分 下载全才可以解压 博文链接:https://dlivan.iteye.com/blog/116258
本篇将详细介绍如何使用Java将MP3等二进制文件存入Oracle数据库中的BLOB字段。 首先,我们需要了解Oracle JDBC驱动,这是Java与Oracle数据库交互的基础。Oracle提供了一个名为ojdbc的JDBC驱动,它可以连接到Oracle...
分享在JAVA中Blob转换成String实例
本教程将详细讲解如何使用Java来实现BLOB(Binary Large Object)类型的大文件,如图片,在Oracle数据库中的存储和查找,这对于初学者理解和掌握JDBC技术极具价值。 首先,我们需要理解BLOB类型。BLOB是Oracle...
视频第三部分共七部分 下载全才可以解压 博文链接:https://dlivan.iteye.com/blog/116256
本文将详细介绍如何在Oracle数据库中实现Blob字段的上传和下载操作。 #### 二、Blob字段上传 Blob字段的上传通常涉及到以下几个步骤: 1. **创建Blob字段:** 首先需要在数据库表中定义一个Blob类型的字段。 2. **...
在Java开发中,Blob(Binary Large Object)类型用于存储大对象,如图片、音频或视频文件等。Oracle数据库是广泛使用的数据库系统,它支持Blob类型的字段。Hibernate作为一款流行的ORM(对象关系映射)框架,提供了...
通过这种方式,你可以有效地管理和处理存储在Oracle数据库中的大量BLOB数据,使其能够以文件形式在本地系统上访问和使用。 总之,批量导出Oracle数据库中的BLOB字段是一项技术性较强的任务,涉及到数据库连接、SQL...
在Java的JDBC4.0版本中,Oracle数据库的BLOB类型数据操作变得更加方便。BLOB(Binary Large Object)是用来存储大对象,如图像、音频或视频文件等二进制数据的数据库字段类型。以下是对使用JDBC4.0操作Oracle中BLOB...
视频第七部共七部 下载全才可以解压 博文链接:https://dlivan.iteye.com/blog/116262