這篇文章主要介紹了如何基于java向MySQL數(shù)據(jù)庫中存取圖片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
創(chuàng)新互聯(lián)專注于融安企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),成都做商城網(wǎng)站。融安網(wǎng)站建設(shè)公司,為融安等地區(qū)提供建站服務(wù)。全流程按需開發(fā),專業(yè)設(shè)計,全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
學(xué)mysql的時候都是做個表格,放的也都是文字內(nèi)容,雖然我知道長篇的文章和圖片或者視頻的都是用過文件夾的方式存儲的,再講文件路徑存進(jìn)數(shù)據(jù)庫中。但還是想試試直接往mysql數(shù)據(jù)庫中存取圖片。這里我用的是java語言和jdbc實(shí)現(xiàn)的
mysql數(shù)據(jù)庫中有一個類型是Blob類型,這是一個二進(jìn)制類型,通常我們會將圖片或音像文件轉(zhuǎn)成二進(jìn)制再存入數(shù)據(jù)庫中,Blob分為以下幾種:
除了jdbc的連接以外,我們需要用到文件的輸入、輸出流。實(shí)現(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、用戶名、用戶密碼,實(shí)例化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í)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。