Mysql資料庫大文字資料處理
阿新 • • 發佈:2018-12-11
資料庫大文字資料處理 目標:把 mp3檔案儲存到資料庫中! 在my.ini中新增如下配置: max_allowed_packet=10485760 1 什麼是大文字資料 所謂大文字資料,就是大的位元組資料,或大的字元資料。標準SQL中提供瞭如下型別來儲存大文字資料型別:
型別 |
長度 |
tinyblob |
28--1B(256B) |
blob |
216-1B(64K) |
mediumblob |
224-1B(16M) |
longblob |
232-1B(4G) |
tinyclob |
28--1B(256B) |
clob |
216-1B(64K) |
mediumclob |
224-1B(16M) |
longclob |
232-1B(4G) |
但是,在mysql中沒有提供tinyclob、clob、mediumclob、longclob四種類型,而是使用如下四種類型來處理大文字資料:
型別 |
長度 |
tinytext |
28--1B(256B) |
text |
216-1B(64K) |
mediumtext |
224-1B(16M) |
longtext |
232-1B(4G) |
首先我們需要建立一張表,表中要有一個mediumblob(16M)型別的欄位。 CREATE TABLE tab_bin( id INT PRIMARY KEY AUTO_INCREMENT, filename VARCHAR(100), data MEDIUMBLOB ); 還有一種方法,就是把要儲存的資料包裝成Blob型別,然後呼叫PreparedStatement的setBlob()方法來設定資料 程式碼如下: package cn.itcast.demo4; 主要的包 import java.sql.Blob; import javax.sql.rowset.serial.SerialBlob; import org.apache.commons.io.IOUtils; import cn.itcast.demo3.JdbcUtils; /** * 大文字資料 */ public class Demo4 { // 把mp3儲存到資料庫中。 @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 */ @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); } } }