欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

保存圖片到MySQL以及從MySQL讀取圖片全過程

 更新時間:2023年05月19日 10:15:54   作者:讓線程再跑一會  
有人喜歡使用mysql來存儲圖片,而有的人喜歡把圖片存儲在文件系統(tǒng)中,而當我們要處理成千上萬的圖片時,會引起技術問題,下面這篇文章主要給大家介紹了關于如何保存圖片到MySQL以及從MySQL讀取圖片的相關資料,需要的朋友可以參考下

接上次 爬取表情包 ,這次我們直接將表情包存到MySQL數(shù)據(jù)庫而不是本地。

1. 創(chuàng)建數(shù)據(jù)庫

首先創(chuàng)建一個數(shù)據(jù)庫,數(shù)據(jù)庫名為ikun,表名為img,3個字段分別為id(圖片id)、img(二進制碼)、date(存儲時間)

其中,二進制碼的存儲格式應該為 BLOB類型,下面為不同類型對應的最大存儲空間

  • TINYBLOB 255個字節(jié)
  • BLOB 65535字節(jié)
  • MEDIUMBLOB 16M
  • LONGBLOB 4G
USE ikun; 
CREATE TABLE `img` (
  `id` int NOT NULL AUTO_INCREMENT,
  `img` mediumblob NOT NULL,
  `date` date NOT NULL,
  PRIMARY KEY (`id`)
) ;

2. 保存圖片到數(shù)據(jù)庫

將圖片轉(zhuǎn)為二進制流

對于圖片的輸入和輸出,我們更多使用BufferedInputStream或者BufferedOutPutStream

public static void saveInMySQL(String url) throws IOException {
        //獲得連接對象
        Connection con = DBUtil.getConnection("root","******","ikun");
        PreparedStatement pre = null;
        //獲取圖片信息,做輸出流
        InputStream in = getEntityByHttpGetMethod(url).getContent();
        BufferedInputStream inputStream = new BufferedInputStream(in);
        try {
            String sql = "insert into img (img,date) values (?,?)";
            pre = con.prepareStatement(sql);
            pre.setBinaryStream(1,inputStream,in.available());
            Date date = new Date(System.currentTimeMillis());
            pre.setDate(2,date);
            //獲取返回結果
            int i = pre.executeUpdate();
            System.out.println(i);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

查看效果

3. 從數(shù)據(jù)庫讀取圖片

將二進制流轉(zhuǎn)為文件輸出到本地查看

public static void readFromMysql(){
        //獲得連接對象
        Connection con = DBUtil.getConnection("root","******.","ikun");
        PreparedStatement pre = null;
        ResultSet res = null;
        try {
            //這里讀取一張
            String sql = "select * from img where id = 1";
            pre = con.prepareStatement(sql);
            res = pre.executeQuery(sql);
            while (res.next()){
                int id = res.getInt("id");
                InputStream stream = res.getBinaryStream("img");
                Date date = res.getDate("date");
                System.out.println("圖片id為"+id+" 創(chuàng)建時間為"+date.toString());
                Files.copy(stream, Paths.get("D:\\ikun.jpg"));
            }
        } catch (SQLException | IOException e) {
            e.printStackTrace();
        }
        //斷開連接
        DBUtil.close();
    }

寫在最后

??通常我們建議不要直接將圖片存到數(shù)據(jù)庫中,而是放到本地磁盤目錄下,我們通常將圖片統(tǒng)一命名,通過其文件名或路徑來訪問數(shù)據(jù)庫實現(xiàn)獲取圖片的目的。

??而不建議直接往數(shù)據(jù)庫存放圖片的原因如下:

  1. 數(shù)據(jù)庫性能下降:存儲大量數(shù)據(jù)將占用大量的磁盤空間和系統(tǒng)資源,特別影響數(shù)據(jù)庫性能,尤其是多用戶訪問的情況
  2. 數(shù)據(jù)庫的備份和維護變得困難,且可讀性差
  3. 壓力測試:多用戶同時上傳或下載圖片時,將導致數(shù)據(jù)庫服務器壓力負載過大
  4. 圖片質(zhì)量下降:比如我們待會的運行結果其實是這樣的,左邊是我們下載到本地的圖片,右邊則是下載到數(shù)據(jù)庫,再從數(shù)據(jù)庫讀取出來的效果。而且我將二進制數(shù)值類型設置為最大還是模糊。

到此這篇關于保存圖片到MySQL以及從MySQL讀取圖片的文章就介紹到這了,更多相關保存圖片到MySQL及讀取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL空間數(shù)據(jù)存儲及函數(shù)

    MySQL空間數(shù)據(jù)存儲及函數(shù)

    這篇文章主要介紹的使MySQL空間數(shù)據(jù)存儲及函數(shù),MySQL提供了數(shù)據(jù)類型geometry用來存儲坐標信息,MySQL為空間數(shù)據(jù)存儲及處理提供了專用的類型geometry,下面就和小編一起學習下文吧
    2021-09-09
  • 獲取MySQL的表中每個userid最后一條記錄的方法

    獲取MySQL的表中每個userid最后一條記錄的方法

    這篇文章主要介紹了獲取MySQL的表中每個userid最后一條記錄的方法,并且針對userid不唯一的情況,需要的朋友可以參考下
    2015-05-05
  • MySQL中聚合函數(shù)count的使用和性能優(yōu)化技巧

    MySQL中聚合函數(shù)count的使用和性能優(yōu)化技巧

    這篇文章主要介紹了Windows 10,MySQL版本是5.7.12-log環(huán)境下mysql中聚合函數(shù)count的使用和性能優(yōu)化,需要的朋友可以參考下
    2018-06-06
  • Mysql Online DDL的使用詳解

    Mysql Online DDL的使用詳解

    在日常DBA運維過程中,對表結構進行變更算是個普遍的需求了。如果操作的對象是個熱表、大表,難免心里一怵,這些DDL操作是否可以直接執(zhí)行,哪些會影響線上讀寫,哪些會影響主從,甚至導致服務器壓力驟升,本文做了梳理,希望對大家有所幫助。
    2021-05-05
  • MySQL數(shù)據(jù)庫忽略大小寫的配置方法

    MySQL數(shù)據(jù)庫忽略大小寫的配置方法

    這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫忽略大小寫的配置方法,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • MySql中now()與sysdate()區(qū)別小結

    MySql中now()與sysdate()區(qū)別小結

    本文主要介紹了MySql中now()與sysdate()區(qū)別小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • mysql?子查詢的概述和分類及單行子查詢功能實現(xiàn)

    mysql?子查詢的概述和分類及單行子查詢功能實現(xiàn)

    本文詳細介紹了MySQL的子查詢概念和應用,解釋了子查詢是在主查詢中嵌套另一個查詢,包括外查詢和內(nèi)查詢,并從多個角度進行分類,文章還深入探討了子查詢的編寫技巧和使用場景,對于學習和應用MySQL的人來說,這是一篇非常有價值的指南
    2024-10-10
  • mysql查詢語句通過limit來限制查詢的行數(shù)

    mysql查詢語句通過limit來限制查詢的行數(shù)

    這篇文章主要介紹了mysql查詢語句,通過limit來限制查詢的行數(shù),需要的朋友可以參考下
    2014-02-02
  • MySQL用limit方式實現(xiàn)分頁的實例方法

    MySQL用limit方式實現(xiàn)分頁的實例方法

    在本篇文章中小編給大家整理了一篇關于MySQL用limit方式實現(xiàn)分頁的實例方法,有需要的朋友們可以參考學習下。
    2020-01-01
  • mysql存儲過程之if語句用法實例詳解

    mysql存儲過程之if語句用法實例詳解

    這篇文章主要介紹了mysql存儲過程之if語句用法,結合實例形式詳細分析了mysql存儲過程中if語句相關原理、使用技巧與操作注意事項,需要的朋友可以參考下
    2019-12-12

最新評論