`

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();
				}
			}
	}
}

 

分享到:
评论

相关推荐

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

    Struts用 JDBC Blob字段 保存和读取 Oracle 数据库 好用 试过 有详细注释

    oracle中读写blob字段的问题解析

    下面以程序实例说明通过JDBC操纵Oracle数据库LOB类型字段的几种情况。 先建立如下两个测试用的数据库表,Power Designer PD模型如下: 建表SQL语句为:CREATE TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)CREATE

    Oracle 超大文件的保存和读取

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

    jdbc读写Oracle的CLOB字段

    JDBC读写Oracle的CLOB字段

    jdbc中如何处理Oracle___BLOB字段

    java jdbc如何处理Oracle___BLOB字段,以备查阅

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

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

    oracle中使用jdbc读写clob和blob字段

    oracle中使用jdbc读写clob字段,很多细节介绍,内容全面。

    jdbc批量插入大字段

    针对oracle中blob字段的操作,能批量快速的插入大字段,效率非常高

    关于oracle中clob字段查询慢的问题及解决方法

    最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了。 blob字段直接用 select * from table_name where column like ‘%%'查找的时候是不能实现...

    关于在Hibernate中对于Clob,Blob字段的处理方法

    oracle的jdbc驱动程序,用这个版本的操作Clob,blob类型的数据很方便。 博文链接:https://zhenjw.iteye.com/blog/173419

    ssh(structs,spring,hibernate)框架中的上传下载

     本文选用的数据库为Oracle 9i,当然你可以在不改动代码的情况下,通过配置文件的调整将其移植到任何具有Blob字段类型的数据库上,如MySQL,SQLServer等。  总体实现  上传文件保存到T_FILE表中,T_FILE表结构...

    DBKING使用指南

    在dbking中,所有的数据库数据只有五种数据类型,String、Number(BigDecimal)、Timestamp、Clob(String)、Blob(byte[]),经过反复测试后,我们会例出各种数据库数据类型到这五种类型的映射表,当然我们也有...

    Spring中文帮助文档

    11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8....

    Spring API

    11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall使用的参数 11.5.7. 如何定义SqlParameters 11.5.8....

Global site tag (gtag.js) - Google Analytics