转自: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. Vue、Vuex+Cookie 实现自动登陆 。

    概述 1.自动登陆实现思路. 2.vuex + cookie 多标签页状态保持. 自动登陆的需求: 1.登陆时勾选自动登陆,退出登陆或登陆到期后再次登陆后自动填写表单(记住密码)或访问登陆页自动登陆. ...

  2. final 关键字的作用及应用案例

    final关键字的作用如下: 1.可以修饰成员变量,但不能对该成员变量进行修改: 2.可以修饰局部变量,但不能地该局部变量进行修改: 3.可以修饰成员方法(继承),但不能对父类成员方法进行重写: 4. ...

  3. web自动化--如何在不同页面间游刃有余

    大家都知道,selenium中对页面元素的操作都是基于当前页面进行操作的,有时会有这种情况,在这个页面操作完一个步骤后,要去另一个页面查看,这就涉及到页面间的操作 # -*- coding:utf-8 ...

  4. Activity与view

    Activity的作用:一个Activity相当于一个容器,用于存放各种控件的容器,也可以理解为是与用户交互的接口 创建Activity的要点:  1.一个Activity就是一个类,并且这个类要继承 ...

  5. IOS - 执行时 (经常使用函数)

    能够通过NSObject的一些方法获取运行时信息或动态运行一些消息: /*Returns a Boolean value that indicates whether the receiving cl ...

  6. 20145203盖泽双 《网络对抗技术》实践九:Web安全基础实践

    20145203盖泽双 <网络对抗技术>实践九:Web安全基础实践 1.实践目标 1.理解常用网络攻击技术的基本原理. 2.Webgoat下进行相关实验:SQL注入攻击.XSS攻击.CSR ...

  7. 清空visual studio 开发缓存

    C:\Users\Administrator\AppData\Local\Temp\Temporary ASP.NET Files C:\Windows\Microsoft.NET\Framework ...

  8. 老男孩Python全栈视频

    链接:https://pan.baidu.com/s/1c1JOCL1w-vnYGkrhElk_GQ 密码私聊我

  9. PAT A1137 Final Grading (25 分)——排序

    For a student taking the online course "Data Structures" on China University MOOC (http:// ...

  10. jenkins执行远程脚本注意的问题

    1构建任务 ->新建任务 2.填写任务名称    第二次构建可以复制第一次的配置 3.选择任务名称上面右键  选择配置 4.如下图所示 附录脚本内容 test.sh#!/bin/bash JAR ...