Java實現(xiàn)用Mysql存取圖片操作實例
1.MySQL中的BLOB類型
Mysql中可以存儲大文件數(shù)據(jù),一般使用的BLOB對象。如圖片,視頻等等。
BLOB是一個二進制大對象,可以容納可變數(shù)量的數(shù)據(jù)。因為是二進制對象,所以與編碼方式無關(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)。

保存與讀取圖片的代碼如下:
import java.io.*;
import java.sql.*;
public class LoadStoreBLOB {
public static void main(String[] args) {
DBConnection DB = new DBConnection(); //負責連接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(); //將光標指向第一行
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ù),可能會報出MySQL數(shù)據(jù)截斷異常。如:
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
相關(guān)文章
為zookeeper配置相應(yīng)的acl權(quán)限
這篇文章主要介紹了為zookeeper配置相應(yīng)的acl權(quán)限的相關(guān)實例,具有一定參考價值,需要的朋友可以了解下。2017-09-09
java?11新特性HttpClient主要組件及發(fā)送請求示例詳解
這篇文章主要為大家介紹了java?11新特性HttpClient主要組件及發(fā)送請求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
教你一步解決java.io.FileNotFoundException:找不到文件異常
這篇文章主要給大家介紹了關(guān)于如何一步解決java.io.FileNotFoundException:找不到文件異常的相關(guān)資料,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下2024-01-01
在MyBatisPlus中使用@TableField完成字段自動填充的操作
這篇文章主要介紹了在MyBatisPlus中使用@TableField完成字段自動填充的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java全面細致講解Cookie與Session及kaptcha驗證碼的使用
web開發(fā)階段我們主要是瀏覽器和服務(wù)器之間來進行交互。瀏覽器和服務(wù)器之間的交互就像人和人之間進行交流一樣,但是對于機器來說,在一次請求之間只是會攜帶著本次請求的數(shù)據(jù)的,但是可能多次請求之間是會有聯(lián)系的,所以提供了會話機制2022-06-06
Mybatis分頁插件PageHelper的配置和簡單使用方法(推薦)
在使用Java Spring開發(fā)的時候,Mybatis算是對數(shù)據(jù)庫操作的利器了。這篇文章主要介紹了Mybatis分頁插件PageHelper的配置和使用方法,需要的朋友可以參考下2017-12-12

