如何基于java向mysql數(shù)據(jù)庫中存取圖片
這篇文章主要介紹了如何基于java向mysql數(shù)據(jù)庫中存取圖片,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
學(xué)mysql的時(shí)候都是做個(gè)表格,放的也都是文字內(nèi)容,雖然我知道長篇的文章和圖片或者視頻的都是用過文件夾的方式存儲(chǔ)的,再講文件路徑存進(jìn)數(shù)據(jù)庫中。但還是想試試直接往mysql數(shù)據(jù)庫中存取圖片。這里我用的是java語言和jdbc實(shí)現(xiàn)的
mysql數(shù)據(jù)庫中有一個(gè)類型是Blob類型,這是一個(gè)二進(jìn)制類型,通常我們會(huì)將圖片或音像文件轉(zhuǎn)成二進(jìn)制再存入數(shù)據(jù)庫中,Blob分為以下幾種:
- TinyBlob 最大 255
- Blob 最大 65K
- MediumBlob 最大 16M
- LongBlob 最大 4G
除了jdbc的連接以外,我們需要用到文件的輸入、輸出流。實(shí)現(xiàn)兩個(gè)方法,一個(gè)方法向數(shù)據(jù)庫中存圖像,另一個(gè)方法從數(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ū)動(dòng)名
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ū)動(dòng)
try {
Class.forName(JDBC_DRIVER);
// 數(shù)據(jù)庫的連接:通過DriverManager類的getConnection方法,傳入三個(gè)參數(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(?,?,?) ";
// 讀取圖片,圖片放在電腦本地,所以我這里手動(dòng)復(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í)有所幫助,也希望大家多多支持腳本之家。
- Java+mysql本地圖片上傳數(shù)據(jù)庫及下載示例
- Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例
- Java+MySql圖片數(shù)據(jù)保存與讀取的具體實(shí)例
- Java連接mysql數(shù)據(jù)庫代碼實(shí)例程序
- Java連接Mysql 8.0.18版本的方法詳解
- java連接mysql數(shù)據(jù)庫實(shí)現(xiàn)單條插入和批量插入
- java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫
- JavaWeb JDBC + MySql 通訊錄實(shí)現(xiàn)簡單的增刪改查功能案例詳解
相關(guān)文章
解析Mybatis Porxy動(dòng)態(tài)代理和sql解析替換問題
這篇文章主要介紹了Mybatis Porxy動(dòng)態(tài)代理和sql解析替換,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
SpringBoot通過@Value實(shí)現(xiàn)給靜態(tài)變量注入值詳解
這篇文章主要介紹了springboot如何通過@Value給靜態(tài)變量注入值,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教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
Java實(shí)現(xiàn)員工信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)員工信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

