package com.mj.services;
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.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import oracle.sql.BLOB;
public class BlobTest {
private static Connection conn=null;
private PreparedStatement pstm=null;
private ResultSet rst=null;
static{
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:WMG", "hibernate", "hibernate");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 上传数据到数据库
* @param fileid
* @param filename
* @param filepath
* @return
*/
public int insBlob(String fileid, String filename, String filepath){
int result=0;
String sql="INSERT INTO blobtest VALUES(?,?,empty_blob())";
BLOB blob=null;
try {
conn.setAutoCommit(false);
pstm=conn.prepareStatement(sql);
pstm.setString(1, fileid);
pstm.setString(2, filename);
pstm.executeUpdate();
pstm.close();
sql="SELECT file_ FROM blobtest WHERE fileid=? FOR UPDATE";
pstm=conn.prepareStatement(sql);
pstm.setString(1, fileid);
rst=pstm.executeQuery();
if(rst.next()){
blob=(BLOB)rst.getBlob(1);
}
OutputStream out=blob.getBinaryOutputStream();
File file=new File(filepath);
InputStream fin=new FileInputStream(file);
byte[] buffer=new byte[1024*8];
int length=0;
while((length=fin.read(buffer, 0, 1024*7))!=-1){
out.write(buffer, 0, length);
//必须的啊
out.flush();
}
pstm.close();
sql="UPDATE blobtest SET file_=?";
pstm=conn.prepareStatement(sql);
pstm.setBlob(1, blob);
result=pstm.executeUpdate();
//一定不要忘记手动提交事务,关闭各种资源
conn.commit();
pstm.close();
out.close();
fin.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 从数据库下载数据
* @param filename
* @return int 0代表下在失败,1代表下载成功
*/
public int downBlob(String filename){
BLOB blob=null;
String sql="SELECT file_ FROM blobtest WHERE filename=?";
//设立一个标志位,来监控整个运行流程
int result=0;
try {
conn.setAutoCommit(true);
pstm=conn.prepareStatement(sql);
pstm.setString(1, filename);
rst=pstm.executeQuery();
while(rst.next()){
blob=(BLOB)rst.getBlob(1);
result=1;
}
InputStream in=blob.getBinaryStream();
File file=new File("c:\\download_mj\\"+filename);
OutputStream out=new FileOutputStream(file);
byte[] buffer=new byte[1024*8];
int length=0;
//刚开始忘了加length结果读的是空的,还让我郁闷了很长时间,太粗心了还是。。。
while((length=in.read(buffer, 0, 1024*7))!=-1){
result=1;
out.write(buffer, 0, length);
out.flush();
}
pstm.close();
out.close();
in.close();
} catch (SQLException e) {
result=0;
e.printStackTrace();
} catch (FileNotFoundException e) {
result=0;
e.printStackTrace();
} catch (IOException e) {
result=0;
e.printStackTrace();
}
return result;
}
/**
* 查询文件名
* @return
*/
public List findNames(){
List list=new ArrayList();
String sql="SELECT filename FROM blobtest";
try {
pstm=conn.prepareStatement(sql);
rst=pstm.executeQuery();
while(rst.next()){
list.add(rst.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public boolean checkFileid(String fileid){
boolean suc=true;
String sql="SELECT * FROM blobtest WHERE fileid=?";
try {
pstm=conn.prepareStatement(sql);
pstm.setString(1, fileid);
rst=pstm.executeQuery();
if(rst.next()){
suc=false;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return suc;
}
public static void main(String[] args){
new BlobTest().downBlob("web.xml");
}
}
分享到:
相关推荐
本文实例讲述了javascript使用Blob对象实现的下载文件操作。分享给大家供大家参考,具体如下: Blob对象 前言 环境 操作 总结 Blob是一个类文件的不可变的原始数据对象,非javascript原生数据类型,File对象...
20180828开发,提供了三种通过JDBC实现图片存储到BLOB的方式: 1、com.ztf:实现小页面,实现 指定保存的图片+打开指定编号图片 2、com.ub:实现简单的插入及读取操作,读取后的BLOB可以生成新图片,并使用JFrame...
JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等对象 实例详细JDBC中操作Blob、Clob等...
Blob.js-master Blob js 插件,有时候IE不支持Blob,需要我们自己下载Blob插件,有需要小伙伴可以下载
CLOB、BLOB___CLOB与BLOB的区别
blob检测, 基于harris焦点检测,能够检测出图像中所有的blob
delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段delphi读写BLOB字段...
C#,BLOB读取操作
mysql数据库 中用blob存储image及file 数据blob的写入与提取 方法概要
资源中是深度学习caffe的数据结构blob的实例代码,通过下面的命令进行编译 g++ -o blob_demo blob_demo.cpp -I /home/bigmarshal/Documents/deep_learning/caffe/include/ -D CPU_ONLY -I /home/bigmarshal/...
分享在JAVA中Blob转换成String实例
经典的上载图片,存到BLOB对象里面,附带读取图片
Blob分析及形态学分析
mysql+Qt 下对blob数据类型操作
C# oracle blob类型 读入与保存
java读取大字段,介绍java如何读取大字段blob,解决程序员头疼问题
本人开发的oracle数据库LongRaw字段转Blob字段工具,可以指定表名,字段名,条件,开发环境Win7,Oracle xe,VS2010;需要源码修改的发私信
判断blob字段是否为空sql,非常实用
Oracle SQL 函数进行BLOB转换Varchar2
最近开发遇到blob类型转换为String,一时犯难。所以总结了一段代码与之分享。亲测