`

JDBC操纵Oracle数据库中的BLOB字段

阅读更多

                                                                        BLOB字段的写入

 

数据库执行脚本:

create table bxxx(
   id   int primary key ,
   image  blob
);

 

方法一:(JDBC2.0 规范)

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BlobDemo01 {
	public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
	public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL";
	public static final String DBUSER = "scott";
	public static final String DBPASSWORD = "tiger";
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql = "insert into bxxx values(?,?)";
		File f = new File("d:"+File.separator+"5586.jpg");
		InputStream in = null;
		try {
			in = new FileInputStream(f);
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
			}
		try {
			Class.forName(DBDRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
			try {
                conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
				conn.setAutoCommit(false);
				pstmt = conn.prepareStatement(sql);
				pstmt.setInt(1,1);
				pstmt.setBinaryStream(2,in,(int)f.length());
				if(pstmt.executeUpdate()>0){
					System.out.println("OK");
					conn.commit();
					conn.setAutoCommit(true);
				}
			} catch (Exception e) {
				try {
					conn.rollback();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
				e.printStackTrace();
			} finally{
				try {
					in.close();
					pstmt.close();
					conn.close();
				} catch (IOException e) {
					e.printStackTrace();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}
}

  

 

方法二:(古老)

1. 设置不自动提交

2.插入一个空的blob

3.使用行级锁定blob字段

 

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.sql.BLOB;

public class BlobDemo02 {
	public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
	public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL";
	public static final String DBUSER = "scott";
	public static final String DBPASSWORD = "tiger";
	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql1 = "insert into bxxx values(1,empty_blob())";
		String sql2 = "select image from bxxx where id = 1 for update";
		File f = new File("d:"+File.separator+"5586.jpg");
		try {
			Class.forName(DBDRIVER);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
	        conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
			conn.setAutoCommit(false);
			pstmt = conn.prepareStatement(sql1);
			pstmt.executeUpdate();
			pstmt = conn.prepareStatement(sql2);
			rs = pstmt.executeQuery();
			while(rs.next()){
				oracle.sql.BLOB blob = (BLOB) rs.getBlob(1);
PrintStream out = new PrintStream(blob.getBinaryOutputStream());
		BufferedInputStream in = null;
   in = new BufferedInputStream(new FileInputStream(f));
				byte[] b = new byte[512];
				int temp = 0;
				while((temp=in.read(b))!=-1){
					out.write(b,0,temp);
				}
				out.flush();
				in.close();
				out.close();
				conn.commit();
				conn.setAutoCommit(true);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}  finally {
			try {
				rs.close();
				pstmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		System.out.println("OK!");
	}
}
                                                                      
                                                                       BLOB字段的读取

方法一:

 

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.imageio.ImageIO;

public class BlobDemo03 {
	public static void main(String[] args) {
		   PreparedStatement ps = null;
		   ResultSet rs  = null;
		   String sql = "select image from bxxx where id=1";
		   Connection conn = null;
		   File f = new File("d:"+File.separator+"yyyy.jpg");
		   try {
				Class.forName("oracle.jdbc.driver.OracleDriver" );
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
			try {
				conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
				ps = conn.prepareStatement(sql);
				rs = ps.executeQuery();
					while(rs.next()){
						Blob blob =rs.getBlob(1);
						OutputStream out = new FileOutputStream(f);
						BufferedImage image = ImageIO.read(blob.getBinaryStream());
						ImageIO.write(image,"jpg",out);
					}
					System.out.println("ok");
			} catch (Exception e) {
				e.printStackTrace();
			} finally{
				try {
					ps.close();
					rs.close();
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
	}
}

 

 

方法二:

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class BlobDemo04 {

	public static void main(String[] args) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "select image from bxxx where id = 3";
		File f = new File("d:"+File.separator+"xxxx.jpg");
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver" );
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
			try {
                conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
				pstmt = conn.prepareStatement(sql);
				rs = pstmt.executeQuery();
				while(rs.next()){
				InputStream in = rs.getBinaryStream(1);
				OutputStream out = new FileOutputStream(f);
				int temp = 0;
				byte[] b = new byte[512];
				while((temp=in.read(b))!=-1){
					out.write(b,0,temp);
				}
				out.flush();
				out.close();
				in.close();
				System.out.println("OK!");
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					rs.close();
					pstmt.close();
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
	}
}

 

分享到:
评论

相关推荐

    java对oracle数据库中blob字段的处理

    Java对Oracle数据库中BLOB字段的处理涉及多个层面,包括读取、写入、更新以及跨数据库操作等。 ### Java处理Oracle BLOB字段的基本方法 #### 1. 读取BLOB字段 在Java中,读取Oracle数据库中的BLOB字段通常通过`...

    oracle中读取blob字段.doc

    在Java应用程序中读取Oracle数据库中的BLOB字段通常涉及到几个步骤:建立数据库连接、执行查询语句、获取结果集并从中提取BLOB数据,最后将这些数据写入到文件中。 ##### 3.1 加载Oracle驱动 在Java程序中使用...

    java中读取ORACLE中BLOB字段存储的图片

    本文将详细介绍如何在Java应用程序中读取存储在Oracle数据库BLOB字段中的图片数据。 #### 二、准备工作 为了实现读取Oracle数据库中的BLOB字段存储的图片,我们需要进行以下准备: 1. **环境搭建**: - Oracle...

    Struts用JDBC的Blob字段保存和读取Oracle数据库

    本文将详细介绍如何使用Struts结合JDBC操作Oracle数据库中的Blob字段实现文件的保存和读取。 #### 代码分析 根据提供的部分代码示例,我们可以将其分为两个主要部分:文件保存和文件读取。 ##### 文件保存 文件...

    Oracle blob字段上传下载

    3. **写入文件内容:** 将文件内容写入到Blob字段中。 ##### 示例代码(上传部分): ```java public static void uploadBlob(Connection cn, MmsNewsVO evo) throws Exception { // 获取元素主键 String medpk =...

    使用JDBC4.0操作Oracle中BLOB类型的数据方法

    在Java的JDBC4.0版本中,Oracle数据库的BLOB类型数据操作变得更加方便。BLOB(Binary Large Object)是用来存储大对象,如图像、音频或视频文件等二进制数据的数据库字段类型。以下是对使用JDBC4.0操作Oracle中BLOB...

    使用JDBC存取ORACLE数据库中的图片数据.pdf

    在Oracle中存储和读取图片数据时,可以使用PreparedStatement对象的`setBlob()`方法将图像数据写入BLOB字段,而`getBlob()`方法用于读取BLOB字段中的数据。此外,为了提高性能,可能需要关闭自动提交模式(`conn....

    jdbc中如何处理Oracle___BLOB字段

    ### JDBC中如何处理Oracle BLOB字段 在Java开发过程中,特别是在使用JDBC(Java Database Connectivity)与Oracle数据库交互时,处理BLOB(Binary Large Object)类型的数据是一项常见的需求。BLOB通常用于存储大量的...

    使用JDBC和Hibernate来写入Blob型数据到Oracle中

    总结来说,无论是通过JDBC还是Hibernate,写入Oracle数据库的Blob字段都需要先创建一个空Blob,然后获取其cursor,最后将二进制数据写入Blob。在JDBC中,这个过程涉及多个SQL语句和流操作;而在Hibernate中,通过ORM...

    jdbc+hibernate存取blob字段

    本篇将详细介绍如何使用JDBC(Java Database Connectivity)与Hibernate框架来操作Oracle数据库中的BLOB字段。 首先,Oracle数据库的BLOB字段提供了对大对象的高效存储,它的性能优于LONG字段,尤其适合存储大容量...

    Oracle 超大文件的保存和读取

    在Oracle数据库存储超大文件时、以流的方式分段读取和保存,避免内存溢出。本工具类提供两个方法: 1、读取文件保存到Oracle数据库Blob字段(支持超大文件) 2、从数据库中读出大字段到文件中(分块读取)

    jdbc读写Oracle的CLOB字段

    JDBC读写Oracle的CLOB字段

    jsp实现向oracle中blob字段上传附件

    本教程将详细讲解如何使用JSP与Oracle数据库配合,实现向BLOB字段上传附件的功能。 首先,我们需要准备环境:一个配置了Oracle数据库的服务器,JDBC驱动程序(Oracle JDBC driver,如ojdbc)以连接数据库,以及一个...

    oracle数据库的clob大字段在jdbc中的处理方式

    在Java中,当我们需要通过JDBC(Java Database Connectivity)接口与Oracle数据库交互时,处理CLOB字段可能会遇到一些挑战。这篇文档将详细阐述如何在JDBC中有效地读取和操作Oracle数据库的CLOB字段,并将其转换为...

    通过JDBC连接oracle数据库的十大技巧

    ### 通过JDBC连接Oracle数据库的十大技巧 在IT领域,使用Java开发应用程序时,与数据库的交互是一项基本且重要的任务。JDBC(Java Database Connectivity)作为一种标准接口,提供了多种方式来实现Java程序与数据库...

    JDBC+Hibernate将Blob数据写入Oracle

    在IT领域,尤其是在数据库...总之,无论是使用JDBC还是Hibernate,正确处理Oracle中的BLOB字段都是至关重要的,尤其是在处理大量二进制数据的应用场景下。掌握上述流程和技巧,能够有效提升数据操作的效率和安全性。

    Struts2 Hibernate存取Oracle数据库中的BLOB数据.pdf

    在实际操作中,可以通过Hibernate实现Oracle数据库中BLOB数据的存储和删除操作,然后利用Struts2框架展示这些BLOB数据。这样的结合,不仅可以提高开发效率,还能保证应用的性能和稳定性。 ### 实际操作步骤 在实际...

Global site tag (gtag.js) - Google Analytics