Java完成用Mysql存取圖片操作實例。本站提示廣大學習愛好者:(Java完成用Mysql存取圖片操作實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成用Mysql存取圖片操作實例正文
1.MySQL中的BLOB類型
Mysql中可以存儲年夜文件數據,普通應用的BLOB對象。如圖片,視頻等等。
BLOB是一個二進制年夜對象,可以包容可變數目的數據。由於是二進制對象,所以與編碼方法有關。有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數據庫中界說的phototest表構造。
保留與讀取圖片的代碼以下:
import java.io.*; import java.sql.*; public class LoadStoreBLOB { public static void main(String[] args) { DBConnection DB = new DBConnection(); //擔任銜接MySQl數據庫的類 Connection con = null; PreparedStatement ps = null; ResultSet rs = null; InputStream in = null; try { //從當地硬盤硬盤讀取一張圖片保留到數據庫 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); //從數據庫讀取圖片保留到當地硬盤 con=DB.getConn(); ps=con.prepareStatement("select * from test.phototest where id=?"); ps.setInt(1,2); rs=ps.executeQuery(); rs.next(); //將光標指向第一行 in=rs.getBinaryStream("photo"); byte[] b=new byte[in.available()]; //新建保留圖片數據的byte數組 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.選擇適合的字段年夜小
假如選擇的字段類型的最年夜長度較小,放不下保留的數據,能夠會報出MySQL數據截斷異常。如:
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