转自: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.121.151:1521:oracle";
//        String sourceUrl = "jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.52.53)(PORT = 1521)) ) (CONNECT_DATA =(SERVICE_NAME = orcl)))";
String user = "root"; 
String password = "password";
           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;
}
}

Java读取oracle数据库中blob字段数据文件保存到本地文件(转载)的更多相关文章

  1. c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库

    ///c# winform 操作oracle数据库的Blob字段,把图片存储到数据库,保存图片到数据库 闲话不多说,直接上代码 using System; using System.Collectio ...

  2. SpringBoot集成mybatis,同时读取一个数据库中多个数据表

    SpringBoot集成mybatis,同时读取一个数据库中多个数据表: application.properties: mybatis.config-location=classpath:mybat ...

  3. mybatis查询mysql 数据库中 BLOB字段,结果出现乱码

    起因 mybatis-plus 通过Mapper 查询数据,映射出来的BLOB字段中的yml数据中文是乱码的 --- DefaultValue: '' Formula: '' HintContent: ...

  4. C# 中从网络上下载文件保存到本地文件

    下面是C#中常用的从Internet上下载文件保存到本地的一些方法,没有太多的技巧. 1.通过  WebClient  类下载文件 WebClient webClient = new WebClien ...

  5. java向oracle数据库中插入当前时间

    public class Test{public static void main (String args []){ java.util.Date a = new java.util.Date(); ...

  6. java多线程向数据库中加载数据

    读取本地文件,每行为一条记录,文件大小550M,200万条数据.先将文件读取的内存中,再开启6个线程连接postgresql不同coordinator端口导入数据.代码如下: import java. ...

  7. oracle 数据库中某个字段逗号分隔,得到对应列中的个数(列转行)实现方法

    由于各种原因,数据的原则问题,导致某个字段上出现多个数据(依据分隔符隔开),比如 name 字段为 张三;李四;王五等等 需求:求一张表中name字段中出现的个数: 想要得到的结果为: 对应的sql语 ...

  8. 关于从Oracle数据库中删除表数据

    1,删除表 drop 1.1 执行drop table table_name  语句 被 drop后的表被放在用户回收站(user_recyclebin)里,而没有被直接删除掉,回收站里的表可以被恢复 ...

  9. 转 oracle数据库更新时间字段数据时的sql语句

    https://www.cnblogs.com/sun-rain/p/4921512.html ---Oracle数据库-时间函数 ---格式化时间插入update t_user u set u.mo ...

随机推荐

  1. logstash之input、codec学习

    Logstash最强大的功能在于丰富的过滤器插件.此过滤器提供的并不单单是过滤的功能,还可以对进入过滤器的原始数据进行复杂的逻辑处理.甚至添加独特的事件到后续流程中. 1.logstash基本语法组成 ...

  2. 【阿里八八】团队Alpha博客链接目录

    团队Alpha冲刺博客 阿里八八Alpha阶段Scrum(1/12) 阿里八八Alpha阶段Scrum(2/12) 阿里八八Alpha阶段Scrum(3/12) 阿里八八Alpha阶段Scrum(4/ ...

  3. Address already in use: JVM_Bind问题的解决

    tomcat一般出现Address already in use: JVM_Bind的问题,可能是端口冲突,也就是端口被占用了. 这个可能是其他应用程序使用了同一个端口(默认是8080),也可能是你启 ...

  4. web socket RFC6455 frame 打包、解包

    #ifndef __APP_WEBSOCKET_FRAME_H__ #define __APP_WEBSOCKET_FRAME_H__ #include "memory.hpp" ...

  5. Codeforces Round #524 (Div. 2) C. Masha and two friends 几何:判断矩形是否相交以及相交矩形坐标

    题意 :给出一个初始的黑白相间的棋盘  有两个人  第一个人先用白色染一块矩形区域 第二个人再用黑色染一块矩形区域 问最后黑白格子各有多少个 思路:这题的关键在于求相交的矩形区间 给出一个矩形的左下和 ...

  6. SQL update select结合语句详解及应用

    QL update select语句 最常用的update语法是: 1 2 UPDATE TABLE_NAME SET column_name1 = VALUE WHRER column_name2 ...

  7. JDK文档中关于Semaphore的正确使用以及使用场景

    import java.util.concurrent.Semaphore; /** * * JDK文档使用备注:<br> * Semaphores are often used to r ...

  8. Kubernetes1.91(K8s)安装部署过程(八)-- kubernetes-dashboard安装

    kubernets-dashboard顾名思义是操作面板安装,也就是可视化管理机器,同意我们用镜像结合配置文件部署. 1.下载镜像: docker pull registry.docker-cn.co ...

  9. Visual Studio 工具选项设置

    1.显示行号 2.颜色主题 3.显示引用 一 显示行号 1)设置方式:工具-选项-文本编辑器-C#,勾选行号确定 二 颜色主题 1)设置方式:工具-选项-环境-常规,下拉选择:浅色.蓝色.深色,点确定 ...

  10. 洛谷 P1525 关押罪犯

    题目链接 https://www.luogu.org/problemnew/show/P1525 题目描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N.他们之间的关系自然也极不和谐.很多罪 ...