1.MySQL中的BLOB類型
Mysql中可以存儲大文件數(shù)據(jù),一般使用的BLOB對象。如圖片,視頻等等。
BLOB是一個(gè)二進(jìn)制大對象,可以容納可變數(shù)量的數(shù)據(jù)。因?yàn)槭嵌M(jìn)制對象,所以與編碼方式無關(guān)。有4種BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長度不同。
四種字段類型保存的最大長度如下:
TINYBLOB - 255 bytes
BLOB - 65535 bytes(64KB)
MEDIUMBLOB - 16,777,215 bytes(16MB) (2^24 - 1)
LONGBLOB - 4G bytes (2^32 – 1)
2.java對MySQL圖片的讀取
下面是test數(shù)據(jù)庫中定義的phototest表結(jié)構(gòu)。
保存與讀取圖片的代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import java.io.*; import java.sql.*; public class LoadStoreBLOB { public static void main(String[] args) { DBConnection DB = new DBConnection(); //負(fù)責(zé)連接MySQl數(shù)據(jù)庫的類 Connection con = null ; PreparedStatement ps = null ; ResultSet rs = null ; InputStream in = null ; try { //從本地硬盤硬盤讀取一張圖片保存到數(shù)據(jù)庫 con=DB.getConn(); in= new FileInputStream( "sdf.png" ); ps=con.prepareStatement( "insert into test.phototest values(?,?)" ); ps.setInt( 1 , 2 ); ps.setBinaryStream( 2 , in, in.available()); ps.executeUpdate(); in.close(); DB.closeConn(con); //從數(shù)據(jù)庫讀取圖片保存到本地硬盤 con=DB.getConn(); ps=con.prepareStatement( "select * from test.phototest where id=?" ); ps.setInt( 1 , 2 ); rs=ps.executeQuery(); rs.next(); //將光標(biāo)指向第一行 in=rs.getBinaryStream( "photo" ); byte [] b= new byte [in.available()]; //新建保存圖片數(shù)據(jù)的byte數(shù)組 in.read(b); OutputStream out= new FileOutputStream( "222.jpg" ); out.write(b); out.flush(); out.close(); DB.closeConn(con); } catch (Exception e) { System.out.println( "Error::" +e); } } } |
3.選擇合適的字段大小
如果選擇的字段類型的最大長度較小,放不下保存的數(shù)據(jù),可能會報(bào)出MySQL數(shù)據(jù)截?cái)喈惓!H纾?/p>
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'photo' at row 1
Mysql 中文參考手冊列類型:
http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#blob