Java之Byte和blob相互转换(Oracle)-yellowcong
来源:互联网 发布:板式家具设计软件 编辑:程序博客网 时间:2024/06/07 22:25
这几天做的一个项目是将文件系统,存放于oracle中,这时候插入数据库的方式有两种,一种是直接的插入Byte,另一种就是插入blob对象,文章中我会写到如何将byte和blob相互转化。
环境搭建
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.1.0.7.0</version> <scope>test</scope></dependency>
数据库
create table WORD_FILE( gyo_num NUMBER(6), word_kb CHAR(6), word_filename VARCHAR2(80), biko VARCHAR2(80), WORD_FILE BLOB, usr_id VARCHAR2(20), ymdt DATE)
实现代码
创建blob需要通过BLOB.createTemporary
的方法来创建,然后通过setByte的方法来设定Blob里面的数据
package com.yellowcong.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.sql.Blob;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import oracle.sql.BLOB;public class DbBlobTest { private static final String DB_URL = "jdbc:oracle:thin:@10.0.7.170:1522:ORCL5"; private static final String DB_USER = "test"; private static final String DB_PASSWORD = "test"; private static Connection conn = null; public static void main(String[] args) throws Exception { // insert into blob Connection conn = getConnection(); PreparedStatement ps = conn .prepareStatement("INSERT INTO WORD_FILE (GYO_NUM,WORD_KB,WORD_FILENAME,BIKO,USR_ID,YMDT,WORD_FILE) values (6,'KYK002','20171114test.doc','備考','VENAS',TO_DATE('17-11-14','RR-MM-DD'),?)"); String inFile = "C:/Users/zhangrw/Desktop/test/2nANQz3wsFN8rkrTZa5P8xQY8PRBhyHw.jpg"; //设定的是blob类型 ps.setBlob(1, file2Blob(inFile)); ps.executeUpdate(); } /** * test blob data 2 file * @throws Exception */ public static void testBlob2File() throws Exception{ Connection conn = getConnection(); PreparedStatement ps = conn .prepareStatement("select * from WORD_FILE a "); ResultSet rs = ps.executeQuery(); int index = 1; while (rs.next()) { Blob bl = rs.getBlob("WORD_FILE"); String outFile = "C:/Users/zhangrw/Desktop/test/dou_"+(index++)+".doc"; blob2File(bl,outFile); } } /** * upload file * 通过二进制的方式来上传文件 */ public static void testFile2byte(){ try { // insert into blob Connection conn = getConnection(); PreparedStatement ps = conn .prepareStatement("INSERT INTO WORD_FILE (GYO_NUM,WORD_KB,WORD_FILENAME,BIKO,USR_ID,YMDT,WORD_FILE) values (4,'KYK002','20171114test.doc','備考','VENAS',TO_DATE('17-11-14','RR-MM-DD'),?)"); String inFile = "C:/Users/zhangrw/Desktop/test/2nANQz3wsFN8rkrTZa5P8xQY8PRBhyHw.jpg"; byte [] result = file2Byte(inFile); //设定的是自己码文件 ps.setBytes(1, result); ps.executeUpdate(); } catch (SQLException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } /** * 将文件转化为Blob的对象 * create file 2 blob * @param inFile * @return */ public static Blob file2Blob(String inFile){ try { byte [] result = file2Byte(inFile); //creat a new blob BLOB blob = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION); //set start is 1 //这个setBytes 是指定起点,然后设定字节 blob.setBytes(1, result); //pub byte 这个方法是添加byte// blob.putBytes(1, result); return blob; } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } return null; } /** * 将文件转化为二进制的数据 * create file 2 byte * @param inFile * @return */ public static byte[] file2Byte(String inFile){ InputStream in = null; try { in = new FileInputStream(new File(inFile)); int len = in.available(); byte [] result = new byte[len]; in.read(result); return result; } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } return null; } /** * 将Blob文件转化为Blob对象 * convert blob to file * @param blob * @param outFile */ public static void blob2File(Blob blob, String outFile) { InputStream in = null; OutputStream out = null; try { //通过getBinaryStream 方法获取输入流 in = blob.getBinaryStream(); out = new FileOutputStream(new File(outFile)); byte [] buff = new byte[1024]; int len =0; while((len = in.read(buff)) > 0){ out.write(buff, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (in != null) { in.close(); } } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } try { if (out != null) { out.close(); } } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } public static Connection getConnection() { try { if (conn == null) { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager .getConnection(DB_URL, DB_USER, DB_PASSWORD); } return conn; } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } return null; }}
上传结果
这个是测试的图片,如果是word文档,就会是二进制的乱码了
阅读全文
0 0
- Java之Byte和blob相互转换(Oracle)-yellowcong
- java.sql.Blob、byte[]、InputStream之间的相互转换
- java.sql.Blob、byte[]、InputStream之间的相互转换
- Java类型相互转换byte[]类型,blob类型
- java byte[]转换blob
- java中 int和byte相互转换
- java 中 image 和 byte[] 相互转换
- java 中 image 和 byte[] 相互转换
- java 文件和byte数组相互转换
- java ByteBuffer和byte 数组相互转换
- java File和Byte[]数组 相互转换
- Java之驼峰和下划线命名的相互转化-yellowcong
- Java之数组和集合相互转化-yellowcong
- Java Blob类型和String类型相互转换
- Java 中 Blob类型和String类型相互转换
- Java Blob类型和String类型相互转换
- byte和int相互转换
- BYTE 和 COleVariant 相互转换
- 关于AUC(占坑)
- javascript解析
- SSM框架入门和搭建 十部曲
- 梯度下降法、坐标下降法、牛顿迭代法
- 二级购物车
- Java之Byte和blob相互转换(Oracle)-yellowcong
- HDU 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
- java excel模板转html
- angularJS项目
- 将本地的静态页面发布,没服务器怎么发布?
- dataset兼容低版本IE的方法
- Twitter SDE 波士顿电面面经
- 【LeetCode】687.Longest Univalue Path(Easy)解题报告
- Android--------使用BottomTabBar实现底部导航页