JDBC連線資料庫並存取比較大的資料(.mp3)
阿新 • • 發佈:2022-05-05
首先準備兩首mp3歌曲:
然後進行程式碼測試:
package jdbcDemo;
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 javax.sql.rowset.serial.SerialBlob;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.Test;
import JDBC.JdbcUtils;
public class demo1 {
@Test
public void toSave() {
try {
// 得到資料庫連線物件
Connection conn = JdbcUtils.getConnection();
// SQL模板
String sql = "INSERT INTO tab_bin VALUES(?,?,?)";
// 繫結模板
PreparedStatement pstmt = conn.prepareStatement(sql);
// 設定引數
pstmt.setInt(1, 2);
pstmt.setString( 2, "黃昏 - 小阿七.mp3");
// 把檔案轉換為位元組陣列
byte[] byt = IOUtils.toByteArray(new FileInputStream("E:\\Program File\\LXMusic\\DownLoad\\黃昏 - 小阿七.mp3"));
// 使用位元組陣列和Blob實現子類建立Blob物件
Blob blob = new SerialBlob(byt);
pstmt.setBlob(3, blob);
// 執行
pstmt.executeUpdate();
} catch (SQLException | IOException e) {
e.printStackTrace();
}
}
@Test
public void getData() throws Exception {
try {
// 得到資料庫連線物件
Connection conn = JdbcUtils.getConnection();
// SQL模板
String sql = "SELECT * FROM tab_bin";
// 繫結模板
PreparedStatement pstmt = conn.prepareStatement(sql);
// 執行並得到ResultSet物件
ResultSet rs = pstmt.executeQuery();
if(rs.next()) { // 將游標移動到第一行
rs.next(); // 存放第二首
Blob blob = rs.getBlob("data");
OutputStream out = new FileOutputStream("D:" + File.separator + "hh.mp3");
InputStream input = blob.getBinaryStream();
IOUtils.copy(input, out);
out.close();
input.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
先將存入SQL:
然後從SQL取出存入硬碟:
如果存入SQL的過程中報錯packet。。。是因為沒有設定MySQL的最大允許傳輸資訊包的值,參考:
https://www.cnblogs.com/0099-ymsml/p/16224380.html