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字段工具类的更多相关文章

  1. Java jdbc 连接oracle之三(封装工具类)

    driver = oracle.jdbc.driver.OracleDriver url = jdbc:oracle:thin:@192.168.10.105:1521:orcl user = LF ...

  2. Oracle数据库BLOB字段的存取

    述]     Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cur ...

  3. FIREDAC保存ORACLE的BLOB字段数据

     FIREDAC默认识别ORACLE的BLOB字段为HUGEBLOB,需要将HBLOB映射为BLOB,才可以保存ORACLE的BLOB字段的数据.

  4. Java Class与反射相关的一些工具类

    package com.opslab.util; import org.apache.log4j.Logger; import java.io.File;import java.io.IOExcept ...

  5. Java语言Lang包下常用的工具类介绍_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都 ...

  6. java调用kettle的job和transfer工具类

    package com.woaiyitiaocai.util; import java.util.Map; import java.util.UUID; import org.apache.log4j ...

  7. 对oracle数据库Blob字段的操作

    java实体类 定义类型 byte[] private byte[] str_blob hibernate映射文件类型oracle.sql.BLOB <property name="s ...

  8. java中模拟http(https)请求的工具类

    在java中,特别是java web中,我们经常需要碰到的一个场景是我们需要从服务端去发送http请求,获取到数据,而不是直接从浏览器输入请求网址获得相应.比如我们想访问微信接口,获取其返回信息. 在 ...

  9. Excel生成Oracle数据库表sql工具类

    1.解决问题: 开发文档中字段比较多的时候,建表sql(Oracle下划线命名规范)比较麻烦,容易出错~~ (主要是懒) 特意手写一个工具,根据excel字段,生成建表的sql语句. ~~~末尾附Gi ...

随机推荐

  1. 字符编码笔记:ASCII,Unicode 和 UTF-8

    http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

  2. SpringMVC由浅入深day01_9商品修改功能开发

    9 商品修改功能开发 9.1 需求 操作流程: 1.进入商品查询列表页面 2.点击修改,进入商品修改页面,页面中显示了要修改的商品(从数据库查询) 要修改的商品从数据库查询,根据商品id(主键)查询商 ...

  3. 初试WebSocket构建聊天程序

    上一篇文章中使用了Ajax long polling实现了一个简单的聊天程序,对于web实时通信,今天就来试用一下基于WebSocket的长连接方式. WebSocket简介 为了增强web通信的功能 ...

  4. Python之虚拟环境管理

    Python本身有很多个版本,第三方的Python包又有很多可用的版本,所以经常会遇到下面的问题: 运行不同的Python程序,需要使用不同版本的Python(2.x或3.x). 在同一中Python ...

  5. 有人在群里问关于SQL表组合数据问题

    他的问题如下 如此我建表如下: 如果想根据用户进行分组后 又要显示所属门店在同一个字段中的话,这里需要用group_concat来显示 同时关联的时候可用find_in_set来处理 我设计的SQL如 ...

  6. /usr/bin/ld: cannot find -lxxx 的解决办法

    /usr/bin/ld: cannot find -lxxx 的解决办法 在软件编译过程中,经常会碰到类似这样的编译错误: /usr/bin/ld: cannot find -lhdf5 这表示找不到 ...

  7. PHP代码审计笔记--弱类型存在的安全问题

    0x01 前言 PHP 是一门弱类型语言,不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量转换为正确的数据类型. 弱类型比较,是一个比较蛋疼的问题,如左侧为字符串,右侧为一个整 ...

  8. 由于OBJ模型的读取引起的Release无问题Debug卡死问题

    有些时候会遇到Release版本正常运行,但是Debug无法运行甚至崩溃,原因有很多种,这里记录一下由于模型文件读取引起的Debug问题. 项目中需要读取一个obj模型文件,30M左右,Debug模式 ...

  9. javaweb使用cookie存取中文以及读取中文

    要想在cookie中存储中文,那么必须使用URLEncoder类里面的encode(String s, String enc)方法进行中文转码,例如: 1 Cookie cookie = new Co ...

  10. iOS - 代码规范的提示

    我们在些程序时会发现苹果里面有好多非常好的提示 比如: 1.每次SDK升级后 一些方法的方法已经过时了,这时候会给你提示描述该方法已经过期(作用:1.兼顾老版本 2.给开发者一个提示) 2.有时候项目 ...