我介绍的是用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中读取ORACLE中BLOB字段存储的图片
java放blob到Oracle数据库 使用java把mp3等二进制文件放到Oracle数据库中
java对oracle数据库中blob字段的处理
只需要安装oracle client在本地,然后配置好tns,输入连接名,用户名,密码,数据表的名称,文件名数据列名以及blob数据列名,就可以批量导出ORACLE数据库BLOB字段生成图片
java实现 BLOB图片大文件在oracle中的存储和查找,采用MVC模型编写,很适合初学着对JDBC的学习,对熟悉java与oracle的连接很有帮助.
从oracle中的BLOB类型字段中取出照片,转存到mysql数据库中。思路是现将oracle中的照片存储在本地文件夹,在将本地图片上传到mysql中。
指定文件夹下的所有文件上传至oracle的blob字段,java实现
只需要安装oracle client在本地,然后配置好tns,输入连接名,用户名,密码,数据表的名称,文件名数据列名以及blob数据列名,就可以批量导出ORACLE数据库BLOB字段生成图片
java 向SqlServer数据库中存放大文件,即 blob类型的使用示例
简单写的一个小工具,把图片存入oracle中,按clob和blob两种方式存储,并读取图片
批量导出oracle bolb图片到本地文件
C# oracle blob类型 读入与保存
利用Java语言实现PB对Oracle中Blob类型的动态操作 摘要:本文介绍了一种利用Java语言实现PB对Oracle中Blob类型的动态操作的方法。该方法通过使用Java存储过程和Oracle中的JDBC来实现对Blob类型数据的动态访问。 ...
Oracle导出Clob,Blob等大字段工具,自己写的工具,方便大家下载使用
2、com.ub:实现简单的插入及读取操作,读取后的BLOB可以生成新图片,并使用JFrame方式展现。 3、com.cc: 由于需要将两个不同库(测试代码是同一个库的两个表 IMAGETAB和 IMAGETAB3)的的照片进行更新,表里面存...
JAVA 中 SQLlite 数据库 BLOB 数据类型的存取是指在 JAVA 语言中使用 SQLlite 数据库来存储和读取大型二进制对象(BLOB),以便实现文件存储和读取的功能。本文将详细介绍如何使用 JAVA 语言来实现 SQLlite 数据库...
可以从数据库中读取blob字段并插入到另一个表中,已经测试通过
使用PL/SQL脚本将Oracle的Blob字段中存储的图片批量导出到文件夹,可在文件夹中直接查看。
java,Blob字段操作,将图片或者文件保存到数据库中.zip