java-oracle-blob对excle进行上传和下载的一些处理

1:首先是创建表
package Excle;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CreatTable {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Util util=new Util();
String sql1="drop table maexcle";
String sql2="create table maexcle(" +
"filename varchar2(50),filesize number(20),filebody blob,primary key(filename))";
try {
Statement stat=util.conn.createStatement();
// stat.executeUpdate(sql1);
System.out.println(sql2);
stat.execute(sql1);System.out.println("删除成功");
stat.execute(sql2);System.out.println("创建成功");
util.conn.commit();

/* ResultSet rs=stat.executeQuery("select * from maexcle");
while(rs.next()){
System.out.println(rs.toString());
}*/
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

2:Excle插入数据库

package Excle;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import oracle.sql.BLOB;

public class InsertExcle {


public static void main(String[]args){
Util u=new Util();
byte[] data=null;//**将测试文件out.xls读入此字节数组
FileInputStream fis=null;
FileOutputStream fos=null;
OutputStream os=null;
ResultSet rs=null;//**这里rs一定要用Oracle提供的
PreparedStatement ps=null;//**PreparedStatement用Oracle提供的
try{

File file=new File("D://out.xls");
fis=new FileInputStream(file);
int flength=(int)file.length();
System.out.println("file length is:"+flength+"===========");
data=new byte[flength];
int itotal=0;int i=0;
for(;itotal<flength;itotal++){
i=fis.read(data, itotal,flength-itotal);
}
fis.close();
System.out.println("read itotal :"+itotal+"===========");

String mysql="insert into maexcle(filename,filesize,filebody) values(?,?,EMPTY_BLOB())";
ps=u.conn.prepareStatement(mysql);
ps.setString(1,"excle1");
ps.setInt(2, flength);
ps.executeUpdate();
ps.clearParameters();
//插入其它数据后,定位BLOB字段===================
u.conn.setAutoCommit(false);// 如果不关闭会报-->"错误:读取违反顺序"
mysql="select filebody from maexcle where filename=? for update";
ps=u.conn.prepareStatement(mysql);
ps.setString(1, "excle1");
rs=ps.executeQuery();
if(rs.next()){
BLOB blob= (BLOB) rs.getBlob(1);//得到BLOB字段
os=blob.getBinaryOutputStream();
// data是传入的byte数组,定义:byte[] data
os.write(data, 0, data.length);
os.flush();
os.close();
u.conn.commit();
rs.close();
}
System.out.println("insert into ok=====================");
}catch(Exception e){
e.printStackTrace();
}finally{
try {
fis.close();
fos.close();
rs.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}
}

3:Excle从数据库下载并生成文件

package Excle;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import oracle.sql.BLOB;

public class DownExcle {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Util u=new Util();
byte[] data=null;//**将测试文件test.doc读入此字节数组
FileInputStream fis=null;
FileOutputStream fos=null;
OutputStream os=null;
ResultSet rs=null;//**这里rs一定要用Oracle提供的
PreparedStatement ps=null;//**PreparedStatement用Oracle提供的
try{

String mysql="select filebody,filesize from maexcle where filename=?";
ps=u.conn.prepareStatement(mysql);
ps.setString(1,"excle1");
rs=ps.executeQuery();
int flength=0;
if(rs.next()){
BLOB blob=(BLOB) rs.getBlob(1);
System.out.println("blob length is "+blob.getLength());
data=blob.getBytes(1,rs.getInt(2));//从BLOB取出字节流数据
flength=data.length;
System.out.println("data length is "+flength);
u.conn.commit();
}
rs.close();
//将blob取出的数据写入文件
fos=new FileOutputStream(new File("D:/testout.xls"));
fos.write(data, 0,data.length );
System.out.println("文件下载成功---------》》");
}catch(Exception e){
e.printStackTrace();
}finally{
try {
fos.close();
rs.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

}

4:数据库连接

package Excle;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Util {
static Connection conn=null;
public Util() {

try {
Class.forName("oracle.jdbc.driver.OracleDriver");

conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.90.204:1521:power","gdtmis","gdtmis");

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
/* public static void main (String[]args){
Util u=new Util();
if(u.conn!=null){
System.out.println("连接上了");
}

}*/


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值