java读取写入oracle的blob字段工具类
import com.hzunitech.fxgk.sys.model.UtFileData;
import com.jfinal.kit.PathKit;
import com.jfinal.plugin.activerecord.DbKit;
import oracle.sql.BLOB; import java.io.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class FileBlobUtil { @SuppressWarnings("deprecation")
public static int insertBinary(UtFileData utFileData, String filePath) {
String insertSql = "insert into ut_file_data values(?,?,?,?,?,?)";
String updateSql = "update ut_file_data set FILE_DATA=? where FILE_ID=?";
int res = 0;
try {
// Connection conn = getConnection();
Connection conn = DbKit.getConfig().getDataSource().getConnection();
conn.setAutoCommit(false); PreparedStatement pstm = conn.prepareStatement(insertSql);
pstm.setString(1, utFileData.getFileId());
pstm.setString(2, utFileData.getFilePath());
//EMPTY_BLOB和EMPTY_CLOB返回一个空的LOB定位器,
//可以用来初始化一个LOB变量,或在INSERT或UPDATE语句,
//初始化LOB列或属性为空。 EMPTY表示LOB初始化,但不填充数据。
pstm.setBlob(3, oracle.sql.BLOB.empty_lob());
pstm.setString(4, utFileData.getStatus());
pstm.setString(5, utFileData.getDataId());
pstm.setTimestamp(6, utFileData.getAddTime()); pstm.executeUpdate();
pstm.close(); pstm = conn.prepareStatement("select * from ut_file_data where FILE_ID=?");
pstm.setString(1, utFileData.getFileId());
ResultSet rs = pstm.executeQuery();
rs.next(); BLOB blob = (BLOB) rs.getBlob(3);
OutputStream os = blob.getBinaryOutputStream();
FileInputStream fis = new FileInputStream(filePath);
byte[] buff = new byte[1024];
// byte[] buff = new byte[fis.available()];
int len = fis.read(buff);
while (len != -1) {
os.write(buff);
len = fis.read(buff);
}
pstm = conn.prepareStatement(updateSql);
pstm.setBlob(1, blob);
pstm.setString(2, utFileData.getFileId());
res = pstm.executeUpdate(); fis.close();
os.close();
conn.commit();
rs.close();
pstm.close();
conn.close();
if (res > 0) {
System.out.println("附件上传ut_file_data:success");
}
} catch (Exception ex) {
ex.printStackTrace();
} return res;
} @SuppressWarnings("deprecation")
public static int readBinary(String fileId) {
int res = 0;
try {
String querySql = "select * from ut_file_data where FILE_ID = ?";
Connection conn = DbKit.getConfig().getDataSource().getConnection(); PreparedStatement pstm = conn.prepareStatement(querySql);
pstm.setString(1, fileId);
ResultSet rs = pstm.executeQuery();
if (rs.next()) {
String filePath = rs.getString(2);
BLOB fileData = (BLOB) rs.getBlob(3);
InputStream ins = fileData.getBinaryStream(); String docPath = PathKit.getWebRootPath() + File.separator + filePath; File file = new File(docPath);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if (!file.exists()) {
file.createNewFile();
}
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = ins.read(buffer, 0, 1024)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close(); rs.close();
pstm.close();
conn.close(); res++;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} return res;
} //写入测试
public static void test() {
String inFile = "C:/Users/zz/Desktop/icon.png";
// String inFile = "C:/Users/zz/Desktop/111.xls";
// String inFile = "C:/Users/zz/Desktop/222.txt";
UtFileData utFileData = new UtFileData();
String uuid = ValidateUtil.getUUid();
utFileData.setFileId(uuid);
utFileData.setFilePath("images/warn/icon.png");
// utFileData.setFilePath("images/warn/111.xls");
// utFileData.setFilePath("images/warn/222.txt");
utFileData.setStatus("true");
utFileData.setDataId("11122233");
utFileData.setAddTime(DateFormatUtil.getCurrTimestamp());
// utFileData.save(uuid);
FileBlobUtil.insertBinary(utFileData, inFile);
}
}
java读取写入oracle的blob字段工具类的更多相关文章
- Java jdbc 连接oracle之三(封装工具类)
driver = oracle.jdbc.driver.OracleDriver url = jdbc:oracle:thin:@192.168.10.105:1521:orcl user = LF ...
- Oracle数据库BLOB字段的存取
述] Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cur ...
- FIREDAC保存ORACLE的BLOB字段数据
FIREDAC默认识别ORACLE的BLOB字段为HUGEBLOB,需要将HBLOB映射为BLOB,才可以保存ORACLE的BLOB字段的数据.
- Java Class与反射相关的一些工具类
package com.opslab.util; import org.apache.log4j.Logger; import java.io.File;import java.io.IOExcept ...
- Java语言Lang包下常用的工具类介绍_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都 ...
- java调用kettle的job和transfer工具类
package com.woaiyitiaocai.util; import java.util.Map; import java.util.UUID; import org.apache.log4j ...
- 对oracle数据库Blob字段的操作
java实体类 定义类型 byte[] private byte[] str_blob hibernate映射文件类型oracle.sql.BLOB <property name="s ...
- java中模拟http(https)请求的工具类
在java中,特别是java web中,我们经常需要碰到的一个场景是我们需要从服务端去发送http请求,获取到数据,而不是直接从浏览器输入请求网址获得相应.比如我们想访问微信接口,获取其返回信息. 在 ...
- Excel生成Oracle数据库表sql工具类
1.解决问题: 开发文档中字段比较多的时候,建表sql(Oracle下划线命名规范)比较麻烦,容易出错~~ (主要是懒) 特意手写一个工具,根据excel字段,生成建表的sql语句. ~~~末尾附Gi ...
随机推荐
- level1 -- unit 3 - 频率副词
频率副词 never sometimes usually always never 从不 sometimes 有时 usually 通常 always 总是 频率排名(从最不到最经常): never ...
- 如何破解银行O2O模式创新
文/赵志宏 摩 根大通的买房APP,使客户可根据自己的位置选择合适的贷款经理:华道数据提供的卡惠APP,使客户可随时查询自己周围信用卡刷卡打折的商户信息:民生银 行的微信预约叫号功能,使客户根据可自己 ...
- 利用opencv作透明重叠人群密度热度图
在作热度图的时候我们经常需要将热度图调整透明度后叠加在原图上达到更好的展示效果.比如检测人气密度的热度图: (来自sensetime) 一般作图的时候会第一时间想到matplotlib,因为可以很方便 ...
- Git中的文件状态和使用问题解决
(暂存区 即Index In Git) commit 到 local respository的内容,不想push,则使用git reset 将文件状态回转到staged|modified|unstag ...
- ASP.NET MVC 4 (四) 控制器扩展
MVC的标准流程是请求传递给控制器,由控制器action方法操作数据模型,最后交由视图渲染输出,这里忽略了两个细节,就是MVC是如何创建相应控制器实例,又是如何调用控制器action方法的,这就必须讲 ...
- Popupwindow全屏问题
//sdk > 21 解决 标题栏没有办法遮罩的问题 popupWindow.setClippingEnabled(false);
- linux 开机自启脚本
1.vi /home/dpf/mqtt.sh #!/bin/sh/home/dpf/Desktop/Udp_Single_Async_Mqtt_yuan/hwjc_udp_receive_mqtt & ...
- CoreData 多表 关联
本文转载至 http://www.jianshu.com/p/e9f3b5e0cd19 1.概念简介 coreData中存在复杂的数据关系时,一张表难以满足需求,此时就需要了解使用coreData多表 ...
- SpringMVC系列之URL匹配问题
一.工程目录 二.web.xml配置文件及与其他文件的关系 三.控制器部分 四.返回值 五.url前后缀 六.项目源代码 http://files.cnblogs.com/files/xujian20 ...
- Python学习(23):Python面向对象(1)速成
转自 http://www.cnblogs.com/BeginMan/p/3190776.html 一.Python经典类与新类 经典类:如果没有直接或间接的子类化一个对象,也就是说如果没有指定一个父 ...