读取BLOB数据格式的操作

package org.smart.storage.server;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
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 java.sql.Statement;


import com.itextpdf.text.pdf.PdfReader;


import oracle.sql.BLOB;


public class Test {


public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException{
PdfReader reader = new PdfReader("D:\\asd2.pdf");
int numberOfPages = reader.getNumberOfPages();
System.out.println(numberOfPages);

/*
* 从ORACLE数据库中读取BLOB数据类型的文件
* BLOB为二进制流的储存格式
*/
Class.forName("oracle.jdbc.OracleDriver");

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@10.51.24.20:1521:orcl" , "gzj_da" , "gzj_da");

String sql = "select * from GZJ.APP_FUJIAN where fjid in (select fujianid from GZJ.APP_FUJIANMAIN WHERE archiveid='8ab398845b7f9abe015ba71f960d0bc2')";

Statement statement = conn.createStatement();

ResultSet rs = statement.executeQuery(sql);
int i = 1;
while(rs.next()){
String string = rs.getString("FJID");
System.out.println(string);

Blob blob = rs.getBlob("FILEBLOB");
InputStream is = blob.getBinaryStream();

System.out.println(blob==null);

File file = new File("D:/fujian/WU"+i+".txt");

FileOutputStream fos = new FileOutputStream(file);
int len = 0;
byte byt[]  = new byte[1024];
while((len = is.read(byt)) != -1){
fos.write(byt,0,len);
}
i++;
}
statement.close();
conn.close();

/**
* 把文件以二进制流的形式写入到数据库中
* 写入到BLOB格式的格式中
* 中心思想:先写入oracle.sql.BLOB.getEmptyBLOB()来占个地方,然后再"流"来个狸猫换太子
*/
Class.forName("oracle.jdbc.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.3.128:1521:XE", "hr", "hr");
conn.setAutoCommit(false);
String sql = "insert into APP_FUJIAN(FJID, FILEBLOB, CID, YFILENAME, FILEDIR)";
sql += "values(?,?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "YI5");
ps.setBlob(2, oracle.sql.BLOB.getEmptyBLOB());
ps.setString(3, "1");
ps.setString(4, "wenjian");
ps.setString(5, "2017");
ps.executeUpdate();
sql="select FILEBLOB from APP_FUJIAN where fjid='YI5'";
ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
oracle.sql.BLOB blob = null;
while(rs.next()){

blob = (oracle.sql.BLOB) rs.getBlob(1);
OutputStream os = blob.setBinaryStream(0);
InputStream is = new FileInputStream("D:\\fujian\\YI5.xls");
int i = 0;
//byte[] buffer  = new byte[2];
while((i = is.read()) != -1){
os.write(i);
}
is.close();
os.flush();
os.close();
}
conn.commit();
conn.setAutoCommit(true);
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}

conn.close();

}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值