如何基于java向mysql數(shù)據(jù)庫中存取圖片
這篇文章主要介紹了如何基于java向mysql數(shù)據(jù)庫中存取圖片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
學(xué)mysql的時候都是做個表格,放的也都是文字內(nèi)容,雖然我知道長篇的文章和圖片或者視頻的都是用過文件夾的方式存儲的,再講文件路徑存進數(shù)據(jù)庫中。但還是想試試直接往mysql數(shù)據(jù)庫中存取圖片。這里我用的是java語言和jdbc實現(xiàn)的
mysql數(shù)據(jù)庫中有一個類型是Blob類型,這是一個二進制類型,通常我們會將圖片或音像文件轉(zhuǎn)成二進制再存入數(shù)據(jù)庫中,Blob分為以下幾種:
- TinyBlob 最大 255
- Blob 最大 65K
- MediumBlob 最大 16M
- LongBlob 最大 4G
除了jdbc的連接以外,我們需要用到文件的輸入、輸出流。實現(xiàn)兩個方法,一個方法向數(shù)據(jù)庫中存圖像,另一個方法從數(shù)據(jù)庫中讀取圖像并存在電腦本地
import java.io.*; import java.sql.*; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner; public class Database { //JDBC驅(qū)動名 String JDBC_DRIVER = "com.mysql.jdbc.Driver"; //數(shù)據(jù)庫URL:這里的tt是數(shù)據(jù)庫名稱 String JDBC_URL = "jdbc:mysql://localhost:3306/daImage?useSSL=false&serverTimezone=UTC"; // 數(shù)據(jù)庫的用戶名與密碼 String USER = "root"; String PASS = "admin123"; //通過DriverManager類獲得該連接對象才能訪問數(shù)據(jù)庫 Connection connection = null; // 通過Connection獲得該結(jié)果對象用于執(zhí)行靜態(tài)的SQL語句 // Statement statement = null; PreparedStatement preparedStatement = null; String path; FileInputStream fileInputStream; Database() { // 注冊JDBC驅(qū)動 try { Class.forName(JDBC_DRIVER); // 數(shù)據(jù)庫的連接:通過DriverManager類的getConnection方法,傳入三個參數(shù):數(shù)據(jù)庫URL、用戶名、用戶密碼,實例化connection對象 connection = DriverManager.getConnection(JDBC_URL, USER, PASS); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } public void add() { // 定義數(shù)據(jù)庫查詢語句:查詢aa表中的name、sex兩列數(shù)據(jù) String sql = "insert into taImage values(?,?,?) "; // 讀取圖片,圖片放在電腦本地,所以我這里手動復(fù)制了路徑 File file = new File("/Users/liuliu/Desktop/vv.jpeg"); try { FileInputStream fi = new FileInputStream(file); preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 2); preparedStatement.setString(2, "圖片一"); preparedStatement.setBlob(3, fi); // 執(zhí)行查詢語句 int f = preparedStatement.executeUpdate(); if (f > 0) { System.out.println("插入成功"); } else { System.out.println("插入失敗"); } preparedStatement.close(); connection.close(); } catch (SQLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } } public void select() { Blob get_image; String sql = "select* from taImage"; try { // 將讀取到的圖片存放到指定的路徑中 FileOutputStream fileOutputStream = new FileOutputStream("/Users/liuliu/Desktop/bb.jpg"); preparedStatement = connection.prepareStatement(sql); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { get_image = resultSet.getBlob("photo"); // 將讀取到的Blob對象轉(zhuǎn)成字節(jié)流 inputStream = get_image.getBinaryStream(); int a; byte b[] = new byte[1014]; while ((a = inputStream.read(b)) != -1) { fileOutputStream.write(b, 0, a); } } } catch (SQLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
解析Mybatis Porxy動態(tài)代理和sql解析替換問題
這篇文章主要介紹了Mybatis Porxy動態(tài)代理和sql解析替換,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04SpringBoot通過@Value實現(xiàn)給靜態(tài)變量注入值詳解
這篇文章主要介紹了springboot如何通過@Value給靜態(tài)變量注入值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07透過Spring源碼查看Bean的命名轉(zhuǎn)換規(guī)則圖文詳解
Java Bean是一種 Java 編程語言編寫的可重用軟件組件,包括符合一定規(guī)范的Java 類、屬性和方法,用于描述和處理應(yīng)用程序中的數(shù)據(jù)對象,下面這篇文章主要給大家介紹了關(guān)于透過Spring源碼查看Bean的命名轉(zhuǎn)換規(guī)則的相關(guān)資料,需要的朋友可以參考下2023-06-06