如何基于java向mysql數(shù)據(jù)庫(kù)中存取圖片
這篇文章主要介紹了如何基于java向mysql數(shù)據(jù)庫(kù)中存取圖片,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
學(xué)mysql的時(shí)候都是做個(gè)表格,放的也都是文字內(nèi)容,雖然我知道長(zhǎng)篇的文章和圖片或者視頻的都是用過(guò)文件夾的方式存儲(chǔ)的,再講文件路徑存進(jìn)數(shù)據(jù)庫(kù)中。但還是想試試直接往mysql數(shù)據(jù)庫(kù)中存取圖片。這里我用的是java語(yǔ)言和jdbc實(shí)現(xiàn)的
mysql數(shù)據(jù)庫(kù)中有一個(gè)類(lèi)型是Blob類(lèi)型,這是一個(gè)二進(jìn)制類(lèi)型,通常我們會(huì)將圖片或音像文件轉(zhuǎn)成二進(jìn)制再存入數(shù)據(jù)庫(kù)中,Blob分為以下幾種:
- TinyBlob 最大 255
- Blob 最大 65K
- MediumBlob 最大 16M
- LongBlob 最大 4G
除了jdbc的連接以外,我們需要用到文件的輸入、輸出流。實(shí)現(xiàn)兩個(gè)方法,一個(gè)方法向數(shù)據(jù)庫(kù)中存圖像,另一個(gè)方法從數(shù)據(jù)庫(kù)中讀取圖像并存在電腦本地
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ù)庫(kù)URL:這里的tt是數(shù)據(jù)庫(kù)名稱
String JDBC_URL = "jdbc:mysql://localhost:3306/daImage?useSSL=false&serverTimezone=UTC";
// 數(shù)據(jù)庫(kù)的用戶名與密碼
String USER = "root";
String PASS = "admin123";
//通過(guò)DriverManager類(lèi)獲得該連接對(duì)象才能訪問(wèn)數(shù)據(jù)庫(kù)
Connection connection = null;
// 通過(guò)Connection獲得該結(jié)果對(duì)象用于執(zhí)行靜態(tài)的SQL語(yǔ)句
// Statement statement = null;
PreparedStatement preparedStatement = null;
String path;
FileInputStream fileInputStream;
Database() {
// 注冊(cè)JDBC驅(qū)動(dòng)
try {
Class.forName(JDBC_DRIVER);
// 數(shù)據(jù)庫(kù)的連接:通過(guò)DriverManager類(lèi)的getConnection方法,傳入三個(gè)參數(shù):數(shù)據(jù)庫(kù)URL、用戶名、用戶密碼,實(shí)例化connection對(duì)象
connection = DriverManager.getConnection(JDBC_URL, USER, PASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void add() {
// 定義數(shù)據(jù)庫(kù)查詢語(yǔ)句:查詢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í)行查詢語(yǔ)句
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對(duì)象轉(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();
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java+mysql本地圖片上傳數(shù)據(jù)庫(kù)及下載示例
- Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例
- Java+MySql圖片數(shù)據(jù)保存與讀取的具體實(shí)例
- Java連接mysql數(shù)據(jù)庫(kù)代碼實(shí)例程序
- Java連接Mysql 8.0.18版本的方法詳解
- java連接mysql數(shù)據(jù)庫(kù)實(shí)現(xiàn)單條插入和批量插入
- java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫(kù)
- JavaWeb JDBC + MySql 通訊錄實(shí)現(xiàn)簡(jiǎn)單的增刪改查功能案例詳解
相關(guān)文章
idea2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟
這篇文章主要介紹了idea 2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
java 制作驗(yàn)證碼并進(jìn)行驗(yàn)證實(shí)例詳解
這篇文章主要介紹了java 制作驗(yàn)證碼并進(jìn)行驗(yàn)證實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
Springboot微服務(wù)項(xiàng)目整合Kafka實(shí)現(xiàn)文章上下架功能
這篇文章主要介紹了Springboot微服務(wù)項(xiàng)目整合Kafka實(shí)現(xiàn)文章上下架功能,包括Kafka消息發(fā)送快速入門(mén)及相關(guān)功能引入,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之財(cái)務(wù)預(yù)算管理系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+SSM+Jsp+Mysql+Layui+Maven開(kāi)發(fā)的財(cái)務(wù)預(yù)算管理系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有財(cái)務(wù)預(yù)算管理該有的所有功能,感興趣的朋友快來(lái)看看吧2022-02-02
Java通過(guò)反射,如何動(dòng)態(tài)修改注解的某個(gè)屬性值
這篇文章主要介紹了Java通過(guò)反射,動(dòng)態(tài)修改注解的某個(gè)屬性值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringMVC項(xiàng)目異常處理機(jī)制詳解
SpringMVC是一種基于Java,實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦?;谡?qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開(kāi)發(fā)2022-08-08
Java實(shí)現(xiàn)字符編碼轉(zhuǎn)換(utf-8/gbk)
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)字符編碼轉(zhuǎn)換工具,主要針對(duì)UTF-8和GBK兩種編碼格式,文中的示例代碼講解詳,需要的可以了解下2025-03-03

