校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 往MySQL中存儲圖片的方法

往MySQL中存儲圖片的方法

熱門標簽:電銷卡外呼系統供應商 400電話可以免費申請嗎 福建外呼系統定制化 騰訊地圖標注提升 怎么在地圖標注位置生成圖片 銅陵防封電銷卡 真人語音電話機器人 悟空科技電話機器人 美國反騷擾電話機器人

1 介紹

在設計到數據庫的開發中,難免要將圖片或音頻文件插入到數據庫中的情況。一般來說,我們可以同過插入圖片文件相應的存儲位置,而不是文件本身,來避免直接向數據庫里插入的麻煩。但有些時候,向MySQL中插入圖片更加容易管理。那么在MySQL中該怎么存儲呢?

參考資料[1]中有個相當清晰的例子,不過是基于MySQL圖形界面的查詢工具Query Brower的,你的機子上沒有安裝的話,可能得不到很好的理解。我在這里不在贅述,更詳細的資料請看給出的鏈接吧。

還有,[1]中的例子其實只是向我們說明了Query Brower的易用和強大,對我們在開發中實際應用不是很大。所以下面就讓我們用JAVA寫一個向MySQL中存儲的簡單實例。

2 建表

首先,先要在數據庫中建表。我在名為test的數據庫下建立了一個叫pic的表。該表包括3列,idpic, caption和img。其中idpic是主鍵,caption是對圖片的表述,img是圖像文件本身。建表的SQL語句如下:

DROP TABLE IF EXISTS `test`.`pic`;
CREATE TABLE `test`.`pic` (
 `idpic` int(11) NOT NULL auto_increment,
 `caption` varchar(45) NOT NULL default '',
 `img` longblob NOT NULL,
 PRIMARY KEY (`idpic`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

將上面的語句輸入到命令行中(如果安裝了Query Brower, 你可以按照參考[1]中的指示來建表,那樣會更加方便。),執行,表建立成功。

3 實現圖像存儲類

表完成后,我們就開始寫個Java類,來完成向數據庫中插入圖片的操作。我們知道,Java與數據庫連接是通過JDBC driver來實現的。我用的是MySQL網站上提供的MySQL Connector/J,如果你用的是其他類型的driver, 在下面的實現過程中可能會有些許差別。

3.1 裝載JDBC驅動,建立連接

JDK中提供的DriverManager接口用來管理Java Application 和 JDBC Driver之間的連接。在使用這個接口之前, DriverManager需要知道要連接的JDBC 驅動。最簡單的方法就是用Class.forName()來向DriverManager注冊實現了java.sql.Driver 的接口類。對MySQL Connector/J來說,這個類的名字叫com.mysql.jdbc.Driver。

下面這個簡單的示例說明了怎樣來注冊Connector/J Driver。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class LoadDriver {
  public static void main(String[] args) {
    try {
      // The newInstance() call is a work around for some
      // broken Java implementations
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      
      // Connection con = DriverManager.getConnection(……)
      // ……
    } catch (Exception ex) {
      // handle the error
    }
}

向DriverManager注冊了驅動后,我們就可以通過調用 DriverManager.getConnection()方法來獲得和數據庫的連接。其實在上面的例子中就有這條語句,只不過被注釋掉了。在后面的實現中會有完整的例子。

3.2 PreparedStatement

完成上面的步驟后,我們就可以同過建立的連接創建Statement接口類,來執行一些SQL語句了。在下面的例子,我用的是PreparedStatement,還有CallableStatement,它可以執行一些存儲過程和函數,這里不多講了。下面的代碼片斷是向pic表中插入一條記錄。其中(1)處Connection接口的對象con通過調用prepareStatement 方法得到預編譯的SQL 語句(precompiled SQL statement);(2)處是為該insert語句的第一個問號賦值,(3)為第二個賦值,(4)為第三個,這步也是最該一提的,用的方法是setBinaryStream(),第一個參數3是指第三個問號,fis是一個二進制文件流,第三個參數是該文件流的長度。

PreparedStatement ps;
…
ps = con.prepareStatement("insert into PIC values (?,?,?)"); // (1)
ps.setInt(1, id); //(2)
ps.setString(2, file.getName()); (3)
ps.setBinaryStream(3, fis, (int)file.length()); (4)
ps.executeUpdate();
…

3.3 完整代碼

上面列出了完整的代碼。

package com.forrest.storepic;
 import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 
/**
 * This class describes how to store picture file into MySQL.
 * @author Yanjiang Qian
 * @version 1.0 Jan-02-2006
 */
public class StorePictures {
  
  private String dbDriver;
  private String dbURL;
  private String dbUser;
  private String dbPassword;
  private Connection con;
  private PreparedStatement ps; 
 
  public StorePictures() {
    dbDriver = "com.mysql.jdbc.Driver";
    dbURL = "jdbc:mysql://localhost:3306/test";
    dbUser = "root";
    dbPassword = "admin";
    initDB();
  }
  
  public StorePictures(String strDriver, String strURL,
      String strUser, String strPwd) {
    dbDriver = strDriver;
    dbURL = strURL;
    dbUser = strUser;
    dbPassword = strPwd;
    initDB();
  }
 
  public void initDB() {
    try {
      // Load Driver
      Class.forName(dbDriver).newInstance();
      // Get connection
      con = DriverManager.getConnection(dbURL,
          dbUser, dbPassword);      
    } catch(ClassNotFoundException e) {
      System.out.println(e.getMessage());
    } catch(SQLException ex) {
      // handle any errors
      System.out.println("SQLException: " + ex.getMessage());
      System.out.println("SQLState: " + ex.getSQLState());
      System.out.println("VendorError: " + ex.getErrorCode());
 
    } catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }
 
  public boolean storeImg(String strFile) throws Exception {
    boolean written = false;
    if (con == null)
      written = false;
    else {
      int id = 0;
      File file = new File(strFile);
      FileInputStream fis = new FileInputStream(file);
      
      try {       
        ps = con.prepareStatement("SELECT MAX(idpic) FROM PIC");
        ResultSet rs = ps.executeQuery();
        
        if(rs != null) {
          while(rs.next()) {
            id = rs.getInt(1)+1;
          }
        } else {    
          return written;
        }
        
        ps = con.prepareStatement("insert "
            + "into PIC values (?,?,?)");
        ps.setInt(1, id);
        ps.setString(2, file.getName());
        ps.setBinaryStream(3, fis, (int) file.length());
        ps.executeUpdate();
        
        written = true;
      } catch (SQLException e) {
        written = false;
        System.out.println("SQLException: "
            + e.getMessage());
        System.out.println("SQLState: "
            + e.getSQLState());
        System.out.println("VendorError: "
            + e.getErrorCode());
        e.printStackTrace();
      } finally {       
        ps.close();
        fis.close();
        // close db con
        con.close();
      }
    }
    return written;
  }
  
  /**
   * Start point of the program
   * @param args CMD line
   */
  public static void main(String[] args) {
    if(args.length != 1) {
      System.err.println("java StorePictures filename");
      System.exit(1);
    }
    boolean flag = false;
    StorePictures sp = new StorePictures();
    try {
      flag = sp.storeImg(args[0]);
    } catch (Exception e) {
      e.printStackTrace();
    }
    if(flag) {
      System.out.println("Picture uploading is successful.");
    } else {
      System.out.println("Picture uploading is failed.");
    }
  }
}

4 總結

到此,我們就介紹完了使用往MySQL保存圖片的全過程。這個例子是個最簡單的實例,讀者可以根據自己的實際需要加入其它的一些功能,比如讀取文件,刪除等,使整個程序更加完善。在寫這篇文章的時候主要參考了參考[2],在此謝過。參考[3]中是一個相當漂亮的例子,不僅有保存還有讀取,而且是有非常直觀的圖形界面,感興趣的可以深入研究。

以上所述是小編給大家介紹的往MySQL中存儲圖片的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

您可能感興趣的文章:
  • MySQL存儲文本和圖片的方法
  • PHP操作MySQL中BLOB字段的方法示例【存儲文本與圖片】
  • Express實現前端后端通信上傳圖片之存儲數據庫(mysql)傻瓜式教程(二)
  • Express實現前端后端通信上傳圖片之存儲數據庫(mysql)傻瓜式教程(一)
  • 圖片存儲與瀏覽一例(Linux+Apache+PHP+MySQL)
  • MYSQL的存儲過程和函數簡單寫法

標簽:聊城 湖北 烏海 白銀 武威 臨汾 湖南 云浮

巨人網絡通訊聲明:本文標題《往MySQL中存儲圖片的方法》,本文關鍵詞  往,MySQL,中,存儲,圖片,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《往MySQL中存儲圖片的方法》相關的同類信息!
  • 本頁收集關于往MySQL中存儲圖片的方法的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    久久久久国产精品人| 中文字幕一区二区在线播放| 国产盗摄一区二区三区| 亚洲中国最大av网站| 国产欧美一区二区精品婷婷| 欧美在线短视频| 在线观看三级视频欧美| 欧美在线制服丝袜| 色噜噜久久综合| 欧美色老头old∨ideo| 色噜噜狠狠一区二区三区果冻| 色综合网站在线| 欧美午夜精品久久久久久超碰| 精品视频一区 二区 三区| 欧美日韩在线综合| 欧美一区二区视频在线观看2020 | 中文字幕免费一区| 国产日韩欧美综合一区| 成人免费小视频| 日韩中文字幕亚洲一区二区va在线| 日韩国产欧美三级| 国产精品一二三| 99久久久精品免费观看国产蜜| 色视频欧美一区二区三区| 欧美久久一区二区| 久久久电影一区二区三区| 最新热久久免费视频| 五月天激情综合| 丁香婷婷综合五月| 欧美日韩视频专区在线播放| 精品国产亚洲在线| 国产精品嫩草久久久久| 一区二区三区色| 欧美a级理论片| 精品一区二区在线视频| 国产风韵犹存在线视精品| 91在线国内视频| 欧美亚洲一区二区三区四区| 色综合中文字幕| 欧美一区二区视频在线观看2022| 国产喷白浆一区二区三区| 亚洲人一二三区| 美女视频网站久久| 成人综合婷婷国产精品久久| 91免费精品国自产拍在线不卡| 在线观看国产91| 久久色在线视频| 一区二区三区精密机械公司| 久久99国内精品| 在线中文字幕一区二区| 精品国产91亚洲一区二区三区婷婷| 日韩欧美aaaaaa| 国产精品久久久久影院色老大| 午夜精品久久久久久久久久| 国产一区二区视频在线| 色噜噜偷拍精品综合在线| **网站欧美大片在线观看| 免播放器亚洲一区| 色欧美片视频在线观看在线视频| 精品日韩成人av| 亚洲一区在线观看免费| 国产成人av电影免费在线观看| 色乱码一区二区三区88| 欧美激情一区二区三区不卡 | 在线免费不卡电影| 久久久久久亚洲综合| 偷偷要91色婷婷| 成人免费看视频| 五月婷婷久久综合| 国产综合色在线| 91亚洲精品乱码久久久久久蜜桃| 91精品国产综合久久久久久漫画 | 51午夜精品国产| 亚洲欧洲精品一区二区三区不卡| 麻豆精品在线视频| 欧美日韩精品一区二区三区| 亚洲视频免费观看| 国产成人av一区二区三区在线观看| 欧美精品1区2区3区| 国产亚洲精品精华液| 亚洲一卡二卡三卡四卡无卡久久| 捆绑调教一区二区三区| 成人丝袜18视频在线观看| 成人黄色在线看| 欧美r级电影在线观看| 日本不卡不码高清免费观看| 欧美三级一区二区| 亚洲妇熟xx妇色黄| 色系网站成人免费| 亚洲人成网站影音先锋播放| 国产成人自拍高清视频在线免费播放| 色综合激情五月| 26uuu欧美日本| 一级特黄大欧美久久久| 日本韩国一区二区| 亚洲综合在线视频| 欧美主播一区二区三区| 午夜精品在线看| 欧美日韩在线播放三区四区| 一区二区三区在线视频免费 | 国产91对白在线观看九色| 久久人人爽人人爽| 成人性视频网站| 欧美va亚洲va| 国产黄色精品网站| 中文字幕永久在线不卡| 91麻豆福利精品推荐| 亚洲精品免费电影| 色悠久久久久综合欧美99| 一级女性全黄久久生活片免费| 欧美亚洲禁片免费| 麻豆高清免费国产一区| 国产婷婷色一区二区三区四区| 国产乱码精品1区2区3区| 国产午夜精品在线观看| 91在线一区二区三区| 国产欧美精品一区二区色综合| 岛国一区二区在线观看| 国产精品久久久久久久久图文区 | 成人在线视频一区二区| 久久久高清一区二区三区| 成人精品视频一区二区三区| 一区二区三区四区不卡在线| 欧美理论片在线| 国产精品一区二区免费不卡 | 国产精品无人区| 99riav一区二区三区| 午夜久久福利影院| 精品三级在线看| 欧日韩精品视频| 国产一区二区在线免费观看| 国产欧美一区二区在线| 欧美丝袜丝交足nylons图片| 国产米奇在线777精品观看| 精品在线播放午夜| 亚洲狠狠丁香婷婷综合久久久| 日韩欧美在线123| 一本到不卡精品视频在线观看| 久久国产夜色精品鲁鲁99| 一区二区三区在线观看视频| 日韩精品一区二区三区中文不卡 | 欧美艳星brazzers| 国产精品99久久久久久久vr| 亚洲成a人片在线观看中文| 国产精品视频一二| 精品国产91洋老外米糕| 日本高清不卡视频| jlzzjlzz欧美大全| 国产一区二区不卡老阿姨| 亚洲成a人v欧美综合天堂| 亚洲三级在线免费| 中文字幕乱码久久午夜不卡| 色噜噜狠狠成人中文综合| 免费在线看成人av| 一区二区三区在线高清| 国产日韩一级二级三级| 日韩美女天天操| 日韩欧美一区在线| 正在播放亚洲一区| 欧美高清性hdvideosex| 在线观看中文字幕不卡| 99国产精品久久久久久久久久久| 国产综合色产在线精品| 麻豆91小视频| 久久精品国产第一区二区三区| 日韩综合小视频| 午夜精品影院在线观看| 午夜精品久久久久久久久久| 亚洲超碰精品一区二区| 亚洲国产美女搞黄色| 亚洲亚洲精品在线观看| 午夜影院久久久| 亚洲激情综合网| 午夜婷婷国产麻豆精品| 亚洲高清免费视频| 日韩有码一区二区三区| 水蜜桃久久夜色精品一区的特点| 天天爽夜夜爽夜夜爽精品视频| 亚洲一区免费在线观看| 午夜免费久久看| 麻豆精品一区二区综合av| 国产一区二区三区黄视频| 国产高清一区日本| 99国产欧美另类久久久精品| 成人免费不卡视频| 久久国产精品72免费观看| 久久精品久久精品| 国产91丝袜在线18| 91福利视频网站| 日韩精品专区在线影院观看| 精品久久久三级丝袜| 国产精品久久久久影视| 一区二区三区不卡视频| 日韩一区精品字幕| 国产精品综合一区二区| 99久久免费视频.com| 欧美日韩国产天堂| 欧美一级欧美一级在线播放| 久久一二三国产| 亚洲欧美电影一区二区|