您的位置:首页 > 数据库 > MySQL

Jdbc-mysql二进制blob类型读写

2011-06-03 11:37 393 查看
package org.util;
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.InputStreamReader;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BlobTest {
	/**
	 * @param args
	 * @throws SQLException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws SQLException, IOException {
		// TODO Auto-generated method stub
		//create();
		read(2);
	}
	
	//将二进制流存储入数据库blob字段类型。
	public static void create() throws SQLException, IOException{
		String sql = "insert into blob_test values(id,?)";
		
		Connection conn = null;
		PreparedStatement ps = null;
		
		try{
			conn = JdbcUtil.getInstance().getConnection();
			ps = conn.prepareStatement(sql);
			File file = new File("input_text_right.gif");
			BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
			ps.setBlob(1, in);
			int id = ps.executeUpdate();
			System.out.println("id:"+id);
			in.close();
		}finally{
			JdbcUtil.free(null, ps, conn);
		}
	}
	
	//读取二进制流,并写入新的文件
	public static void read(int id) throws SQLException, IOException{
		String sql = "select big_bit from blob_test where id=? limit 1";
		
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try{
			conn = JdbcUtil.getInstance().getConnection();
			ps = conn.prepareStatement(sql);
			ps.setInt(1, id);
			rs = ps.executeQuery();
			
			byte[] b = new byte[1024];
			while(rs.next()){
				InputStream in = rs.getBinaryStream(1);//InputStream是字节输入流的所有类的超类
				File file = new File("left.gif");
				BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));//BufferedOutputStream是缓冲的输出流
				
				for(int i=0; (i=in.read(b))>0;){//read方法接收byte数组,并将数据存储在缓冲数组b中
					out.write(b);//将指定的字节写入此缓冲的输出流。
				}
				out.close();//关闭此输出流并释放与此流有关的所有系统资源。
			}
			
			
		}finally{
			JdbcUtil.free(rs, ps, conn);
		}
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: