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. cesium导入3D模型(obj转gltf)

    cesium中支持载入3D模型,不过只支持gltf格式.gltf是khronos组织(起草OpenGL标准的那家)定义的一种交换格式,用于互联网或移动设备上展现3d内容,充分支持opengl,webg ...

  2. [OpenCV] Samples 01: Geometry - 几何图形

    前言 基本的几何图形,标注功能. commondLineParser的使用参见:http://blog.csdn.net/u010305560/article/details/8941365 #inc ...

  3. RedHat6.5-Linux安装telnet服务

    1 下载以下三个包 telnet-0.17-47.el6.x86_64.rpm(telnet客户端) telnet-server-0.17-47.el6.x86_64.rpm(telnet服务端) x ...

  4. 【Android】录音暂停和继续

    https://www.2cto.com/kf/201410/347839.html http://blog.csdn.net/wanli_smile/article/details/7715030 ...

  5. 【译】Kafka学习之路

    一直在思考写一些什么东西作为2017年开篇博客.突然看到一篇<Kafka学习之路>的博文,觉得十分应景,于是决定搬来这“他山之石”.虽然对于Kafka博客我一向坚持原创,不过这篇来自Con ...

  6. tts文本转语音服务

    1. 谷歌tts http://translate.google.cn/translate_tts?ie=UTF-8&tl=zh-CN&q=谷歌 2. 百度tts http://tts ...

  7. linux下使用ftp传递文件的shell脚本

    使用ftp传递文件,传递过程中防止对方取文件,后缀名为writing,传完后再改回来. #!/bin/bash dstpath=cnet ftpip="127.0.0.1" log ...

  8. getopenfilename多选文件/文件夹问题和getsavefilename另存为路径

    关于使用getopenfilename多选多个文件是可以的. 以下是多选文件的代码 bool GetNeedOpenFilePath(vector<tstring>& vectFi ...

  9. Java网络编程之TCP通信

    一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. Server ...

  10. JSP基本用法(二)隐含对象

    一.摘要 在JSP容器中生成的Servlet类的_jspService()方法中,定义了几个对象,在编写JSP页面时我们可以使用这些隐含对象. PageContext pageContext = nu ...