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

Java 专栏收录该内容
1 篇文章 0 订阅

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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值