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.每天进步一点点。