1. 什么是大數據
1. 所謂大數據, 就是大的字節數據,或大的字符數據.
2. 標准 SQL 中提供了如下類型來保存大數據類型:
- 字節數據類型:
tinyblob(256B), blob(64K), mediumblob(16M), longblob(4G)
- 字符數據類型:
tinyclob(256B), clob(64K), mediumclob(16M), longclob(4G)
3. MySql 中處理字符的數據類型名稱與 SQL 標准不同:
- 字符數據類型:
tinytext(256B), text(64K), mediumtext(16M), longtext(4G)
// 示例: 把 mp3 保存到數據庫中
// 需要在 MySql 配置文件中添加如下配置: `max_allowed_packet=10485760`
// 因為 MySql 默認不允許數據包傳輸過大
public class Demo{
// 將 mp3 文件保存到數據庫中
public void fun1(){
// 獲取連接對象
Connection con = JdbcUtils.getConnection();
// 提供 sql 模板, 獲取 PreparedStatement 對象
String sql = "INSERT INTO tab_bin VALUES(?,?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
// 設置 sql 模板參數
pstmt.setInt(1,001);
pstmt.setString(2,"hello.mp3");
// mp3 保存為 blob 類型的數據
// 通過 commons-io 工具類, 將 mp3 轉換成 byte[]
Byte[] bytes = IOUtils.toByteArray(new FileInputStream("/Users/姓名/Desktop/hello.mp3"));
// 使用 bytes, 創建 Blob 對象
Blob blob = new SerialBlob(bytes);
pstmt.setBlob(3,blob);
// 發送 sql 語句
pstmt.executeUpdate();
}
// 從數據庫中獲取 mp3 數據
public void fun2(){
// 獲取連接對象
Connection con = JdbcUtils.getConnection();
// 獲取 PreparedStatement 對象
String sql = "SELECT * FROM tab_bin";
PreparedStatement pstmt = con.prepareStatement(sql);
// 發送 sql 語句, 返回 ResultSet 對象
ResultSet rs = pstmt.executeQuery();
// 將 rs 中名為 data 列的數據
if(rs.next()){
Blob blob = rs.getBlob("data");
// 把 blob 轉換成硬盤上的 mp3 文件
// 1. 通過 blob 得到輸入流對象
// 2. 自己創建輸出流對象
// 3. 把輸入流的數據寫入到輸出流中
InputStream in = blob.getBinaryStream();
OutputStream out = new FileOutputStream("/Users/姓名/Document/world.mp3");
// 使用工具類中的方法
IOUtils.copy(in,out);
}
}
}
參考資料: