JAVA读取Oracle数据库BLOB字段数据文件并保存到本地文件

******JAVA读取Oracle数据库BLOB字段数据文件并保存到本地文件******

package com.bo.test;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
 * 示例说明:
 * JAVA读取Oracle数据库BLOB字段数据文件并保存到本地文件
 * 1. 使用Oracle的JDBC驱动。
 * 2. BLOB字段中存储的是一个文件,把BLOB字段中存储的内容保存到磁盘中形成文件。
 * 程序代码片断如下:
 * 
 * @author YaoYuanbo   
 * @emile 619576123@qq.com
 *
 */
public class ReadDBIo2File {
	public ReadDBIo2File() {
	}

	public static void main(String args[]) {
		ReadDBIo2File test = new ReadDBIo2File();

		if (test.getDate()) {
			System.out.print("操作成功!");
		} else {
			System.out.print("操作异常!");
		}
	}

	public boolean getDate() {
		Connection conn = null;
		Statement sql = null;
		ResultSet rs = null;
		try {
			try {
				// Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
				// String sourceURL = "jdbc:odbc:ORDB";
				Class.forName("oracle.jdbc.driver.OracleDriver");
				String sourceURL = "jdbc:oracle:thin:@192.168.12.251:1521:oracle";
				String user = "hhus";
				String password = "hhus";

				conn = DriverManager.getConnection(sourceURL, user, password);

				sql = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
						ResultSet.CONCUR_UPDATABLE);

				// 注:“ini”字段为BLOB字段
				String sqlstr = "select * from report_file t where t.studyid = '6475880'  ";

				rs = sql.executeQuery(sqlstr);

				while (rs.next()) {
					String name = rs.getString("studyid");

					// 如下使用JdbcOdbcDriver则报错:Hit uncaught exception
					// java.lang.UnsupportedOperationException
					// java.sql.Blob blob = rs.getBlob("ini");

					// 注意这里的写法:使用的是OracleDriver
					oracle.sql.BLOB blob = (oracle.sql.BLOB) rs
							.getBlob("reportfile");

					String filepath = "C:/" + name + ".pdf";
					System.out.println("输出文件路径为:" + filepath);
					try {
						InputStream in = blob.getBinaryStream(); // 建立输出流
						FileOutputStream file = new FileOutputStream(filepath);
						int len = (int) blob.length();
						byte[] buffer = new byte[len]; // 建立缓冲区
						while ((len = in.read(buffer)) != -1) {
							file.write(buffer, 0, len);
						}
						file.close();
						in.close();
					} catch (Exception e) {
						System.out.println("I/O Exception.");
						return false;
					}
				}
			} finally {
				rs.close();
				sql.close();
				conn.close();
			}
		} catch (SQLException e) {
			System.out.println("SQLException.");
			return false;
		} catch (ClassNotFoundException e) {
			System.out.println("ClassNotFoundException.");
			return false;
		}
		return true;
	}
}

  

原文地址:https://www.cnblogs.com/forever2698/p/4747349.html