Java读取oracle数据库中blob字段数据文件保存到本地文件

时间:2019-03-21
本文章向大家介绍Java读取oracle数据库中blob字段数据文件保存到本地文件,主要包括Java读取oracle数据库中blob字段数据文件保存到本地文件使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

转自:https://www.cnblogs.com/forever2698/p/4747349.html

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字段中存储的内容保存到磁盘中形成文件。
 * 程序代码片断如下:
 *
 *
 */
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.id = '6475880'";
 
                rs = sql.executeQuery(sqlstr);
 
                while (rs.next()) {
                    String name = rs.getString("id");
 
                    // 如下使用JdbcOdbcDriver则报错:Hit uncaught exception
                    // java.lang.UnsupportedOperationException
                    // java.sql.Blob blob = rs.getBlob("ini");
 
                    // 注意这里的写法:使用的是OracleDriver
                    //reportfile数据库中的blob字段
                    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;
    }
}