我介绍的是用JDBC的方法进行操作,想用Java来操作Oracle必须(我不知道有没有其他方法)要有classes12.jar(zap),这个东西在网上搜,一搜一大把,如果上不了网,那就去Oracle的安装目录去找吧,举个例子,我的Oracle是10G,classes12.jar的藏身之处就在这里:oracle\product\10.2.0\db_1\jdbc\lib.费话少说,现在来晒晒我的代码.
哎?稍等...在晒代码之前还有一个准备工作,那就是建立数据库表啊,呵呵.
建立表和索引(索引有无均可)的脚本如下:
-- Create table create table T_IMAGE ( ID VARCHAR2(4), IMAGE BLOB ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Create/Recreate indexes create unique index PK_IMAGE on T_IMAGE (ID) tablespace USERS pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );
package com.test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.tomcat.dbcp.dbcp.ConnectionFactory; public class TestImage { private static Connection conn = null; private Statement stmt = null; private ResultSet rs = null; static { try { // 加载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); // 获得连接 conn = DriverManager.getConnection( "jdbc:oracle:thin:@172.16.225.170:1521:orcl", "scott", "tiger"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } /** * 关闭所有与数据库相关的连接 * * @param conn * @param stmt * @param rs */ public void closeAll(ResultSet rs, Statement stmt, Connection conn) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 向数据库中插入图片 */ public void inputImage() { try { stmt = conn.createStatement(); conn.setAutoCommit(false);// 取消自动提交功能 OutputStream os = null; // 插入一个空对象empty_blob() stmt.executeUpdate("insert into t_image (id, image) values (2, empty_blob())"); // 锁定数据行进行更新,注意"for update"语句 rs = stmt.executeQuery("select image from t_image where id=2 for update"); if (rs.next()) { // 得到java.sql.Blob对象后强制转换为oracle.sql.BLOB oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("image"); // 通过getBinaryOutputStream()方法获得向数据库中插入图片的"管道" os = blob.getBinaryOutputStream(); // 读取想要存储的图片文件 InputStream is = new FileInputStream("E:\\新建文件夹\\6Q52OO3R00DE0005.jpg"); // 依次读取流字节,并输出到已定义好的数据库字段中. int i = 0; while ((i = is.read()) != -1) { os.write(i); } } os.flush(); os.close(); conn.commit(); conn.setAutoCommit(true);// 恢复现场 } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭相应数据库连接 closeAll(rs, stmt, conn); } } /** * 从数据库里检索出图片 */ public void outputImage() { try { String sql = "select image from t_image where id=1"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); if (rs.next()) { oracle.sql.BLOB b = (oracle.sql.BLOB) rs.getBlob(1); InputStream is = b.getBinaryStream(); FileOutputStream fos = new FileOutputStream("E:\\outputImage.jpg"); int i = 0; while ((i = is.read()) != -1) { fos.write(i); } fos.flush(); fos.close(); is.close(); } } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { closeAll(rs, stmt, conn); } } public static void main(String[] args) { // 从硬盘提取图片插入到数据库中 // new TestImage().inputImage(); // 从数据库中检索图片到硬盘 new TestImage().outputImage(); } }
注意主函数中被注释掉的方法哦,那个是往数据库里面插入的,嘿嘿....
还有就是不能同时进行插入和检出,因为我的Connection放在了Static中,而每次对数据库操作之后又对其进行了关闭操作,所以inputImage和outputImage不能同时进行,呵呵.
以上,谢谢...
相关推荐
### 使用Java向Oracle数据库插入图片(BLOB)文件 #### 一、概述 本文将详细介绍如何使用Java通过JDBC向Oracle数据库中插入图片文件的方法。此过程涉及到的主要技术包括Java编程语言、Oracle数据库以及JDBC驱动。...
### Java中读取Oracle数据库BLOB字段存储的图片方法详解 #### 一、背景与目的 在实际的应用开发过程中,经常会有将图片等二进制数据存入数据库的需求。Oracle数据库支持通过BLOB(Binary Large Object)类型来存储...
Oracle数据库系统支持多种复杂的数据类型,其中包括BLOB(Binary Large Object),用于存储非结构化的大数据,如图片、音频或视频文件。而MySQL同样提供了BLOB类型,用于相似的用途。本篇将详细讲解如何在Oracle与...
本教程将详细讲解如何使用Java来实现BLOB(Binary Large Object)类型的大文件,如图片,在Oracle数据库中的存储和查找,这对于初学者理解和掌握JDBC技术极具价值。 首先,我们需要理解BLOB类型。BLOB是Oracle...
在Java编程中,Blob(Binary Large Object)是用于存储大量二进制数据的数据类型,常被用在数据库中保存图片、文件等非文本信息。本教程将深入探讨如何使用Java进行Blob字段的操作,以实现将图片或文件保存到数据库...
在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...
- 此方法用于向数据库中插入新的记录,包括图片在内的各种数据。 - 同样地,通过 `ConnBean.getConn()` 获取数据库连接。 - 准备一个 SQL 插入语句,其中包含了多个字段,包括一个名为 `JPGUPLOAD` 的 BLOB 字段...
在Java编程中,Oracle数据库中的BLOB(Binary Large Object)类型用于存储大量的二进制数据,如图片、视频或文档。这篇博客文章“JAVA操作Oracle blob类型”将深入探讨如何在Java应用程序中有效地管理和操作Oracle...
在数据库管理中,Blob(Binary Large Object)类型用于存储大对象,如图片、音频或视频文件等非结构化数据。MySQL和Oracle都是广泛使用的数据库管理系统,它们都支持Blob类型的字段来存储这类数据。本篇文章将深入...
本教程将深入探讨如何利用Java的JDBC(Java Database Connectivity)和ORM框架Hibernate来处理Oracle数据库中的Blob型数据。 首先,我们需要理解JDBC。JDBC是Java中连接数据库的标准接口,它允许开发者通过编写Java...
这个过程通常涉及到Blob和Clob数据类型,它们是Java中的两种特殊对象,用于存储大对象(LOB)。Blob用于存储二进制数据,如图片、音频或视频文件,而Clob则用于存储字符数据,比如长文本。以下是如何使用Java处理...
在Java编程中,Blob(Binary Large Object)是用于存储大量二进制数据的数据类型,常在数据库中使用,如SQL Server和Oracle。本教程将详细解释如何将Byte数组转换为Blob对象,并将其存储到数据库中,特别关注图像...
### Oracle中的BLOB和CLOB的区别 在Oracle数据库中,`BLOB`(Binary Large Object)和`CLOB`(Character Large Object)是用于存储大量数据的两种特殊数据类型。这两种类型都属于`LOB`(Large Object)类别,主要...
在Java的JDBC4.0版本中,Oracle数据库的BLOB类型数据操作变得更加方便。BLOB(Binary Large Object)是用来存储大对象,如图像、音频或视频文件等二进制数据的数据库字段类型。以下是对使用JDBC4.0操作Oracle中BLOB...
【标题】:“Hibernate向Oracle插入图片”的实现方法与步骤 在Java开发中,有时我们需要将图片数据存储到数据库中,特别是在构建支持用户上传图片的Web应用时。Oracle数据库是常用的数据库系统之一,而Hibernate...
这使得我们能够在数据库环境中利用Java的丰富库,比如生成二维码的库。 总结起来,这个项目实现了将Java生成的二维码图片通过Oracle触发器转换为BLOB,并存储到数据库表中,这在需要在数据库中存储和检索二维码图像...
在Oracle数据库中,BLOB(Binary Large Object)字段是用来存储大量二进制数据的类型,如图片、视频或任何非文本文件。与之相对的是CLOB(Character Large Object),用于存储大量的文本数据。在Java应用中,特别是...
总的来说,这个示例提供了一种有效的方法来处理数据库中的图片存储,通过BASE64编码简化了数据的传输和存储,同时在数据库层面利用Blob类型保持了图片数据的完整性。不过,对于大量图片或需要安全保护的图片,更推荐...