1. 程式人生 > 其它 >JDBC連線資料庫並存取比較大的資料(.mp3)

JDBC連線資料庫並存取比較大的資料(.mp3)

首先準備兩首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