数据库中图片的操作(字节流的操作)

package com.fww.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* @author fu
* 类初始化加载的时候实现驱动的注册
* 本类实现的是一个数据库的连接的操作的工具类,
* 其中提供的是数据库的连接以及数据库最后的资源释放的操作
*
*/
public class JDBCUtil {

//数据库的连接时候的url
private static String url = "jdbc:mysql://localhost:3306/jdbc";
//数据库的用户
private static String user = "root";
//数据库用户对用的密码
private static String password = "sa";

static{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

/**
*
* 获取数据库连接的操作
* @return 已经和数据库进行连接的connection对象
* @throws SQLException 数据库连接获取失败的操作
*/
public static Connection getConnection() throws SQLException{
return DriverManager.getConnection(url, user, password);
}


/**
* @param conn 已经和数据库进行连接的connection对象
* @param sql 需要进行执行的sql语句
* @return 预处理的对象preparedStatement
*/
public static PreparedStatement getPreparedStatement(Connection conn,String sql){
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return ps;
}

/**
* 数据库连接箱资源释放的操作
* @param conn 和数据库进行连接的对象
* @param ps 预处理的preparedStatement对象
* @param rs sql执行的结果集
*/
public static void close(Connection conn, Statement ps, ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

}
2. [代码]字节流的操作(图片为实例) 跳至 [1] [2] [全屏预览]
package com.fww.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.fww.util.JDBCUtil;

/**
* @author fu
* 实现的是一个大的文件的存放的操作,
* 典型的实例是一个图片的操作
* 实际上是一个使用到文件的字节流的操作的
*/
public class BlobTest {

public static void main(String[] args) {
// insert();//文件的存放的测试
read();
}

//插入的操作实例
static void insert(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {

conn = JDBCUtil.getConnection();
String sql = "insert into blob_test(blob_text) values(?)";
ps = JDBCUtil.getPreparedStatement(conn, sql);
//一个用于进行存放的图片数据
File file = new File("43.jpg");
InputStream in = new BufferedInputStream(new FileInputStream(file));
ps.setBinaryStream(1, in, (int)file.length());

int i = ps.executeUpdate();

in.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
JDBCUtil.close(conn, ps, rs);
}

}


//实现一个文件的读取的操作
static void read() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {

conn = JDBCUtil.getConnection();
String sql = "select blob_text from blob_test where 1=?";
ps = JDBCUtil.getPreparedStatement(conn, sql);
ps.setInt(1, 1);
rs = ps.executeQuery();
while(rs.next()){
Blob blob = rs.getBlob(1);
InputStream in = blob.getBinaryStream();
//可以直接的拿到字节流的操作如下:
//in = rs.getBinaryStream(1);

File file = new File("test.jpg");
OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
byte[] buff = new byte[1024];
for(int i=0;(i=in.read(buff))>0;){
out.write(buff, 0, i);
}
out.close();
in.close();
}

} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally{
JDBCUtil.close(conn, ps, rs);
}
}


}
转:http://www.oschina.net/code/snippet_1377870_26795 数据库中图片的操作(字节流的操作)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值