使用java将数据库文件复制到本地磁盘中

package com.starry.exersise;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.rowset.serial.SerialBlob;

import org.apache.commons.io.IOUtils;
import org.junit.Test;

/**
 * 将mysql中的MP3文件复制到本地磁盘中
 * 
 * 方法一:
 * 		整体思路	1:新建一个input输入流读取MP3文件内容
 * 				2:将读取到的mp3文件写入byte数组中
 * 				3:连接数据库,将文件写入数据库中(数据类型为blob类型)
 * 方法二: 第三方类库中的方法
 * 		
 * @author Starry
 *
 */
public class InputMp3 {
	//定义需要使用的变量
	static Connection con=null;//创建一个连接数据库的对象
	static PreparedStatement pst=null;//定义一个向数据库发送sql与语句的对象\
	static ResultSet res=null;//定义一个结果集
	@Test
	public void test() throws Exception{
		//调用方法1
		method1();
		//调用方法2
		//method2();
	}
	
	/**
	 * 方法一
	 * @throws IOException
	 * @throws SQLException
	 */
	public void method1() throws Exception{
		//创建一个connection对象(后面的是我自己定义的一个工具类,复制不可用)
		con=MyJDBCUtil.getConnection();
		//定义一个sql语句
		String sql="select 文件 from table2 where id=1";
		//创建一个preparedstatement对象
		pst=con.prepareStatement(sql);
		//获取结果集
		res=pst.executeQuery();
		//使用while
		while(res.next()){
			Blob b=res.getBlob("文件");
			Blob blob=new SerialBlob(b);
			//创建一个input 来获取blob对象
			InputStream ins=blob.getBinaryStream();
			//使用buffered 加快速度
			BufferedInputStream bis=new BufferedInputStream(ins);
			//创建一个输出流  写入要复制到的位置
			BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("C:\\新建文件夹 (2)\\copybb.mp3"));
			//创建一个byte数组 
			byte[] array=new byte[1024];
			int len=0;
			while((len=bis.read(array))!=-1){
				bos.write(array, 0, len);
			}
			//关闭流
			bis.close();
			bos.close();
		}
	}
	
	/**
	 * 方法二
	 * @throws IOException
	 * @throws SQLException
	 */
	public void method2() throws Exception{
		//创建一个connection对象(后面的是我自己定义的一个工具类,复制不可用)
		con=MyJDBCUtil.getConnection();
		//定义一个sql语句
		String sql="select 文件 from table2 where id=1";
		//创建一个preparedstatement对象
		pst=con.prepareStatement(sql);
		//获取结果集
		res=pst.executeQuery();
		//使用while
		while(res.next()){
			Blob b=res.getBlob("文件");
			Blob blob=new SerialBlob(b);
			//创建一个input 来获取blob对象
			InputStream ins=blob.getBinaryStream();
			//使用buffered 加快速度
			BufferedInputStream bis=new BufferedInputStream(ins);
			//创建一个输出流  写入要复制到的位置
			BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("C:\\新建文件夹 (2)\\copybb.mp3"));

			//第三方类库的形式
			int result = IOUtils.copy(bis, bos);
			System.out.println("copy了多少字节?" + result);
			}
	}
}

						starry.每天进步一点点。

你可能感兴趣的:(mysql数据库)