Javaweb 向Mysql資料庫存取二進位制檔案
阿新 • • 發佈:2019-01-24
package cn.itcast.demo4;
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 javax.sql.rowset.serial.SerialBlob;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import cn.itcast.demo3.JdbcUtils;
/**
* 大資料
* @author cxf
*
*/
public class Demo4 {
/**
* 把mp3儲存到資料庫中。
* @throws SQLException
* @throws IOException
* @throws FileNotFoundException
*/
@Test
public void fun1() throws Exception {
/*
* 1. 得到Connection
* 2. 給出sql模板,建立pstmt
* 3. 設定sql模板中的引數
* 4. 呼叫pstmt的executeUpdate()執行
*/
Connection con = JdbcUtils.getConnection();
String sql = "insert into tab_bin values(?,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, 1);
pstmt.setString(2, "流光飛舞.mp3");
/**
* 需要得到Blob
* 1. 我們有的是檔案,目標是Blob
* 2. 先把檔案變成byte[]
* 3. 再使用byte[]建立Blob
*/
// 把檔案轉換成byte[]
byte[] bytes = IOUtils.toByteArray(new FileInputStream("F:/流光飛舞.mp3"));
// 使用byte[]建立Blob
Blob blob = new SerialBlob(bytes);
// 設定引數
pstmt.setBlob(3, blob);
pstmt.executeUpdate();
}
/**
* 從資料庫讀取mp3
* @throws SQLException
*/
@Test
public void fun2() throws Exception {
/*
* 1. 建立Connection
*/
Connection con = JdbcUtils.getConnection();
/*
* 2. 給出select語句模板,建立pstmt
*/
String sql = "select * from tab_bin";
PreparedStatement pstmt = con.prepareStatement(sql);
/*
* 3. pstmt執行查詢,得到ResultSet
*/
ResultSet rs = pstmt.executeQuery();
/*
* 4. 獲取rs中名為data的列資料
*/
if(rs.next()) {
Blob blob = rs.getBlob("data");
/*
* 把Blob變成硬碟上的檔案!
*/
/*
* 1. 通過Blob得到輸入流物件
* 2. 自己建立輸出流物件
* 3. 把輸入流的資料寫入到輸出流中
*/
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream("c:/lgfw.mp3");
IOUtils.copy(in, out);
}
}
}
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 javax.sql.rowset.serial.SerialBlob;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import cn.itcast.demo3.JdbcUtils;
/**
* 大資料
* @author cxf
*
*/
public class Demo4 {
/**
* 把mp3儲存到資料庫中。
* @throws SQLException
* @throws IOException
* @throws FileNotFoundException
*/
@Test
public void fun1() throws Exception {
/*
* 1. 得到Connection
* 2. 給出sql模板,建立pstmt
* 3. 設定sql模板中的引數
* 4. 呼叫pstmt的executeUpdate()執行
*/
Connection con = JdbcUtils.getConnection();
String sql = "insert into tab_bin values(?,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setInt(1, 1);
pstmt.setString(2, "流光飛舞.mp3");
/**
* 需要得到Blob
* 1. 我們有的是檔案,目標是Blob
* 2. 先把檔案變成byte[]
* 3. 再使用byte[]建立Blob
*/
// 把檔案轉換成byte[]
byte[] bytes = IOUtils.toByteArray(new FileInputStream("F:/流光飛舞.mp3"));
// 使用byte[]建立Blob
Blob blob = new SerialBlob(bytes);
// 設定引數
pstmt.setBlob(3, blob);
pstmt.executeUpdate();
}
/**
* 從資料庫讀取mp3
* @throws SQLException
*/
@Test
public void fun2() throws Exception {
/*
* 1. 建立Connection
*/
Connection con = JdbcUtils.getConnection();
/*
* 2. 給出select語句模板,建立pstmt
*/
String sql = "select * from tab_bin";
PreparedStatement pstmt = con.prepareStatement(sql);
/*
* 3. pstmt執行查詢,得到ResultSet
*/
ResultSet rs = pstmt.executeQuery();
/*
* 4. 獲取rs中名為data的列資料
*/
if(rs.next()) {
Blob blob = rs.getBlob("data");
/*
* 把Blob變成硬碟上的檔案!
*/
/*
* 1. 通過Blob得到輸入流物件
* 2. 自己建立輸出流物件
* 3. 把輸入流的資料寫入到輸出流中
*/
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream("c:/lgfw.mp3");
IOUtils.copy(in, out);
}
}
}
資料庫表結構
CREATE TABLE tab_bin(
id INT PRIMARYKEY AUTO_INCREMENT,
filename VARCHAR(100),
data MEDIUMBLOB
);