Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例
1.MySQL中的BLOB類(lèi)型
Mysql中可以存儲(chǔ)大文件數(shù)據(jù),一般使用的BLOB對(duì)象。如圖片,視頻等等。
BLOB是一個(gè)二進(jìn)制大對(duì)象,可以容納可變數(shù)量的數(shù)據(jù)。因?yàn)槭嵌M(jìn)制對(duì)象,所以與編碼方式無(wú)關(guān)。有4種BLOB類(lèi)型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長(zhǎng)度不同。
四種字段類(lèi)型保存的最大長(zhǎng)度如下:
TINYBLOB - 255 bytes
BLOB - 65535 bytes(64KB)
MEDIUMBLOB - 16,777,215 bytes(16MB) (2^24 - 1)
LONGBLOB - 4G bytes (2^32 – 1)
2.java對(duì)MySQL圖片的讀取
下面是test數(shù)據(jù)庫(kù)中定義的phototest表結(jié)構(gòu)。
保存與讀取圖片的代碼如下:
import java.io.*; import java.sql.*; public class LoadStoreBLOB { public static void main(String[] args) { DBConnection DB = new DBConnection(); //負(fù)責(zé)連接MySQl數(shù)據(jù)庫(kù)的類(lèi) Connection con = null; PreparedStatement ps = null; ResultSet rs = null; InputStream in = null; try { //從本地硬盤(pán)硬盤(pán)讀取一張圖片保存到數(shù)據(jù)庫(kù) 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ù)庫(kù)讀取圖片保存到本地硬盤(pán) 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.選擇合適的字段大小
如果選擇的字段類(lèi)型的最大長(zhǎng)度較小,放不下保存的數(shù)據(jù),可能會(huì)報(bào)出MySQL數(shù)據(jù)截?cái)喈惓?。如?br />
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'photo' at row 1
Mysql 中文參考手冊(cè)列類(lèi)型:
http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#blob
- Java+mysql本地圖片上傳數(shù)據(jù)庫(kù)及下載示例
- Java+MySql圖片數(shù)據(jù)保存與讀取的具體實(shí)例
- Java連接mysql數(shù)據(jù)庫(kù)代碼實(shí)例程序
- Java連接Mysql 8.0.18版本的方法詳解
- java連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)單條插入和批量插入
- java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫(kù)
- JavaWeb JDBC + MySql 通訊錄實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能案例詳解
- 如何基于java向mysql數(shù)據(jù)庫(kù)中存取圖片
相關(guān)文章
為zookeeper配置相應(yīng)的acl權(quán)限
這篇文章主要介紹了為zookeeper配置相應(yīng)的acl權(quán)限的相關(guān)實(shí)例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解
這篇文章主要為大家介紹了java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06SpringBoot配置log4j2的實(shí)現(xiàn)示例
SpringBoot中默認(rèn)使用Logback作為日志框架,本文主要介紹了SpringBoot配置log4j2的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12教你一步解決java.io.FileNotFoundException:找不到文件異常
這篇文章主要給大家介紹了關(guān)于如何一步解決java.io.FileNotFoundException:找不到文件異常的相關(guān)資料,文中通過(guò)圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01在MyBatisPlus中使用@TableField完成字段自動(dòng)填充的操作
這篇文章主要介紹了在MyBatisPlus中使用@TableField完成字段自動(dòng)填充的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Java全面細(xì)致講解Cookie與Session及kaptcha驗(yàn)證碼的使用
web開(kāi)發(fā)階段我們主要是瀏覽器和服務(wù)器之間來(lái)進(jìn)行交互。瀏覽器和服務(wù)器之間的交互就像人和人之間進(jìn)行交流一樣,但是對(duì)于機(jī)器來(lái)說(shuō),在一次請(qǐng)求之間只是會(huì)攜帶著本次請(qǐng)求的數(shù)據(jù)的,但是可能多次請(qǐng)求之間是會(huì)有聯(lián)系的,所以提供了會(huì)話機(jī)制2022-06-06Mybatis分頁(yè)插件PageHelper的配置和簡(jiǎn)單使用方法(推薦)
在使用Java Spring開(kāi)發(fā)的時(shí)候,Mybatis算是對(duì)數(shù)據(jù)庫(kù)操作的利器了。這篇文章主要介紹了Mybatis分頁(yè)插件PageHelper的配置和使用方法,需要的朋友可以參考下2017-12-12如何通過(guò)XML方式配置并實(shí)現(xiàn)Mybatis
這篇文章主要介紹了如何通過(guò)XML方式配置并實(shí)現(xiàn)Mybatis,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11