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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM