java blob 保存文件_java将文件保存为二进制流到oracle表中的blob字段 | 学步园
有时候,我们需要将文件以二进制流的形式存入数据库中,比如oracle表中有一个字段为files,字段类型为blob。如果编写存储过程,传入blob参数或者文件的路径进行处理似乎有些难度,处理起来也麻烦。由于项目使用到了spring,所以使用spring的jdbc作新增和更新操作。
例如:oracle表t_customer_health_document表中有名为files,类型为blob的字段,需要保存一张图片。
首先,创建一个工具类以获取spring的上下文,如下:
package com.zhangjie.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TaskInit {
private static ApplicationContext context = null;
/**
* 单例 ApplicationContext
* 用于获取Spring容器中beans
* @return ApplicationContext
* @see
*/
public static ApplicationContext getInstance() {
if (context == null) {
context = new ClassPathXmlApplicationContext(new String[] {
"applicationContext.xml"});
}
return context;
}
}
然后,使用jdbc操作来将文件保存到files字段中,如下:
package com.zhangjie.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.sql.BLOB;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.jdbc.support.JdbcUtils;
public class UpdateFiles {
public static Boolean updateFiles(String id, String filepath) {
Boolean result = false;
JdbcTemplate jdbcTemplate = (JdbcTemplate) TaskInit.getInstance()
.getBean("jdbcTemplate");;
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rset = null;
try {
con = DataSourceUtils.getConnection(jdbcTemplate.getDataSource());
con.setAutoCommit(false);
BLOB blob = null;
pstmt = con
.prepareStatement("update t_customer_health_document set files=empty_blob() where id=?");
pstmt.setString(1, id);
pstmt.executeUpdate();
pstmt.close();
pstmt = con
.prepareStatement("select files from t_customer_health_document where id= ? for update");
pstmt.setString(1, id);
rset = pstmt.executeQuery();
if (rset.next())
blob = (BLOB) rset.getBlob(1);
File f = new File(filepath);
FileInputStream fin = new FileInputStream(f);
pstmt = con
.prepareStatement("update t_customer_health_document set files=? where id=?");
OutputStream out = blob.getBinaryOutputStream();
byte[] data = new byte[(int) fin.available()];
fin.read(data);
out.write(data);
fin.close();
out.close();
pstmt.setBlob(1, blob);
pstmt.setString(2, id);
pstmt.executeUpdate();
pstmt.close();
con.commit();
con.close();
result = true;
} catch (SQLException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
JdbcUtils.closeResultSet(rset);
JdbcUtils.closeStatement(pstmt);
DataSourceUtils
.releaseConnection(con, jdbcTemplate.getDataSource());
}
return result;
}
public static void main(String[] args) {
boolean is = updateFiles("D6256CEBFEF76A03E040A8C057E005B3", "D:\\web deployment assembly.jpg");
System.out.println(is);
}
}
java blob 保存文件_java将文件保存为二进制流到oracle表中的blob字段 | 学步园相关推荐
- java 主线程等待_JAVA 主线程等待子线程执行完毕后在执行。线程同步 | 学步园...
线程同步器机制有: 障栏: 倒计时门栓: 交换器: 同步队列: 信号量: 需求描述: 最近项目需要实现批量请求另外一个http协议的接口处理业务信息,并根据处理结果的返回值,更新系统业务状态. 鉴于系 ...
- java 类文件_Java类文件概述
所谓 Java 类文件,就是通常用 javac 编译器产生的 .class 文件.这些文件具有严格定义的格式. Java 源文件经过 javac 编译器编译之后,将会生成对应的二进制文件(如下图所示) ...
- java中实现选择文件_Java 实现文件选择对话框及功能
时间:2018-10-02 概述:文件选择器 Java实现文件选择器,就是大家熟悉的打开文件.选择文件的对话框,本例子分为两部分来进行,一个部分是选择器对话框构建部分,另一部分是文件过滤部分,用于过滤 ...
- java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...
尽管Java提供了一个可以处理文件的IO操作类. 但是没有一个复制文件的方法. 复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候. 然而有几种方法可以进行Java文件复制操作,下面列举出 ...
- java上传大文件_Java超大文件上传解决办法
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
- java 上传断点续传_JAVA大文件上传断点续传解决方案
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 Save 改进后的代码不需要for ...
- java多线程上传文件_Java大文件分片上传/多线程上传
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
- java 批量重命名_Java实现文件批量重命名
Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应 ...
- java json上传文件_java实现文件上传
最近自己在做一个小系统玩的时候涉及到了文件的上传,于是在网上找到Java上传文件的方案,最后确定使用common-fileupload实现上传操作. 需求说明 用户添加页面有一个"上传&qu ...
- java 断点上传_java HTTP文件断点上传
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
最新文章
- mysql优化sql相关(持续补充)
- 淘宝上的所有cuda书籍调研
- 常用工具说明--搭建基于rietveld的CodeReview平台(未测试)
- 感谢党,软考过了。系统集成项目管理project师
- DevExpress GridView 添加和设置右键菜单
- java怎么预加载字典值,有选择地显示预加载内容提高网站的性能
- 累加寄存器(AC)入门
- 卡函数or1200基于simple-spi的SD卡驱动
- 需求分析说明书SRS
- python循环结构高一信息技术_高中信息技术《循环结构1》优质课教学设计、教案...
- android 模拟器 超时,Appcelerator Studio超时等待Android模拟器启动
- 表格票据识别人工智能OCR
- 关于Linux运行steam的解决方案
- docker安装Lefse和分析流程
- 祝萍:后疫情时代,医美运营既要走心也要反套路
- 服务中心-ServiceCenter
- video.js播放m3u8视频
- 修复液晶显示器屏幕上的划痕
- 【QT Graphics/View】自定义动态矩形框DyRectangle
- nova 尽然不支持 boot_volume 注入 key 和 passwd