日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java數(shù)據(jù)庫實現(xiàn)圖片存儲詳解(java數(shù)據(jù)庫存儲圖片)

在現(xiàn)代互聯(lián)網(wǎng)時代,圖片已經(jīng)成為了信息傳遞中不可或缺的一部分。大量的網(wǎng)站都需要圖片的支持,而對于這些圖片的存儲和管理,數(shù)據(jù)庫成為了一種非常方便、高效的選擇。Java作為現(xiàn)代編程語言中更受歡迎的一種,也可以利用其自帶的數(shù)據(jù)庫接口,實現(xiàn)對圖片的存儲和管理。本篇文章將會詳細介紹如何在Java中使用數(shù)據(jù)庫實現(xiàn)圖片存儲,包括建立數(shù)據(jù)庫連接、創(chuàng)建表結(jié)構(gòu)、存儲圖片、讀取圖片等內(nèi)容。

建立數(shù)據(jù)庫連接

在Java中,我們可以使用JDBC(Java Database Connectivity)來建立與數(shù)據(jù)庫的連接。具體來說,我們需要引入數(shù)據(jù)庫驅(qū)動程序,并在代碼中使用連接串來建立連接。下面是一個示例代碼:

“`

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DbConnector {

Connection conn;

public DbConnector() {

try {

Class.forName(“com.mysql.cj.jdbc.Driver”);

String url = “jdbc:mysql://localhost:3306/mydb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC”;

String user = “root”;

String pwd = “password”;

this.conn = DriverManager.getConnection(url, user, pwd);

} catch (ClassNotFoundException | SQLException e) {

e.printStackTrace();

}

}

public Connection getConn() {

return conn;

}

public void close() {

if (this.conn != null) {

try {

this.conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

“`

這個類中定義了一個`Connection`類型的`conn`變量,用于存儲連接對象。在構(gòu)造函數(shù)中,我們首先使用`Class.forName()`方法引入了數(shù)據(jù)庫驅(qū)動程序。然后,我們定義了一個連接串,其中需要填寫具體的數(shù)據(jù)庫地址、用戶名和密碼。使用`DriverManager.getConnection()`方法,傳入連接串即可建立與數(shù)據(jù)庫的連接。注意到在這個連接串中,我們需要使用`allowPublicKeyRetrieval=true`,這是為了避免在使用新版MySQL時需要進行SSL配置的問題。

創(chuàng)建表結(jié)構(gòu)

接下來,我們需要在數(shù)據(jù)庫中創(chuàng)建一個表來存儲圖片。在這個表中,我們需要為每個圖片存儲以下信息:

– 圖片ID(唯一標識每個圖片的ID)

– 圖片名稱(用于方便查找和管理)

– 圖片二進制數(shù)據(jù)(真正存儲圖片的數(shù)據(jù))

下面是一個示例DDL語句,用于在MySQL數(shù)據(jù)庫中創(chuàng)建這個表:

“`

CREATE TABLE image (

id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(255),

data MEDIUMBLOB

);

“`

這個表中,`id`列是一個自增的整數(shù),作為圖片的唯一標識;`name`列是一個長度為255的字符串,用于存儲圖片的名稱;`data`列是一個MEDIUMBLOB類型,用于存儲圖片的二進制數(shù)據(jù)。

存儲圖片

在建立好數(shù)據(jù)庫連接和表結(jié)構(gòu)之后,我們現(xiàn)在可以將圖片存儲到數(shù)據(jù)庫中了。具體地,我們可以將圖片的二進制數(shù)據(jù)作為一個參數(shù)傳給`PreparedStatement`對象的`setBytes()`方法,然后執(zhí)行`executeUpdate()`方法即可完成對圖片的存儲。下面是一個示例代碼:

“`

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class DbImage {

public static void storeImage(Connection conn, String name, String filePath) {

String sql = “INSERT INTO image(name, data) VALUES (?, ?)”;

try {

PreparedStatement ps = conn.prepareStatement(sql);

ps.setString(1, name);

InputStream is = new FileInputStream(filePath);

byte[] data = new byte[is.avlable()];

is.read(data);

ps.setBytes(2, data);

ps.executeUpdate();

ps.close();

is.close();

} catch (SQLException | IOException e) {

e.printStackTrace();

}

}

}

“`

這個類中定義了一個`storeImage()`方法,用于將圖片存儲到數(shù)據(jù)庫中。在這個方法中,我們首先構(gòu)造了一個`sql`語句,用于表示對數(shù)據(jù)庫中的`image`表執(zhí)行插入操作。然后,我們使用`PreparedStatement`對象,將`name`和`data`對應(yīng)的值綁定到`?`占位符上。接下來,我們使用`FileInputStream`讀取圖片的二進制數(shù)據(jù),存儲到一個`byte`數(shù)組中。我們使用`ps.executeUpdate()`方法執(zhí)行插入操作,將圖片信息存儲到數(shù)據(jù)庫中。

讀取圖片

在將圖片存儲到數(shù)據(jù)庫中之后,我們現(xiàn)在需要從數(shù)據(jù)庫中讀取出來,渲染到網(wǎng)頁上。這個過程涉及到從數(shù)據(jù)庫中讀取二進制數(shù)據(jù),并將其轉(zhuǎn)換為網(wǎng)頁可以顯示的圖片格式。在Java中,我們可以使用`ResultSet`對象的`getBinaryStream()`方法,將MEDIUMBLOB類型的數(shù)據(jù)讀取為一個`InputStream`對象。然后,我們可以使用`BufferedImage`對象將這個二進制流轉(zhuǎn)換成一個可以顯示的圖片。下面是一個示例代碼:

“`

import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.imageio.ImageIO;

public class DbImage {

public static BufferedImage loadImage(Connection conn, int id) {

String sql = “SELECT * FROM image WHERE id = ?”;

try {

PreparedStatement ps = conn.prepareStatement(sql);

ps.setInt(1, id);

ResultSet rs = ps.executeQuery();

if (rs.next()) {

ByteArrayInputStream bs = new ByteArrayInputStream(rs.getBytes(“data”));

BufferedImage img = ImageIO.read(bs);

bs.close();

rs.close();

ps.close();

return img;

}

rs.close();

ps.close();

} catch (SQLException | IOException e) {

e.printStackTrace();

}

return null;

}

}

“`

這個類中定義了一個`loadImage()`方法,用于從數(shù)據(jù)庫中讀取圖片。在這個方法中,我們首先構(gòu)造了一個`sql`語句,用于表示從數(shù)據(jù)庫中讀取ID為`id`的圖片信息。然后,我們使用`PreparedStatement`對象,將`id`對應(yīng)的值綁定到`?`占位符上。接下來,我們使用`ps.executeQuery()`方法執(zhí)行查詢操作,并使用`rs.next()`判斷結(jié)果集中是否有數(shù)據(jù)。如果有,我們可以使用`rs.getBytes()`方法讀取`data`列中的MEDIUMBLOB類型的二進制流,將其轉(zhuǎn)換成一個`ImageIO`對象,最后返回這個對象。

結(jié)語

本篇文章詳細介紹了如何在Java中使用數(shù)據(jù)庫實現(xiàn)圖片存儲。具體來說,我們介紹了如何建立數(shù)據(jù)庫連接、創(chuàng)建表結(jié)構(gòu)、存儲圖片和讀取圖片等操作。通過這些基本操作,我們可以快速地實現(xiàn)圖片的存儲和管理,為現(xiàn)代互聯(lián)網(wǎng)應(yīng)用提供更好的體驗和支持。希望本篇文章能夠?qū)ava初學(xué)者和互聯(lián)網(wǎng)開發(fā)者有所幫助。

相關(guān)問題拓展閱讀:

  • 用Java能不能把一張圖片存到MySQL數(shù)據(jù)庫中啊
  • java:servlet接收圖片,并把它保存到數(shù)據(jù)庫中

用Java能不能把一張圖片存到MySQL數(shù)據(jù)庫中啊

MySQL 不是文本類數(shù)據(jù)存儲,不能直接存儲圖片和文件。

可以,用BLOB,但是不推薦這么做,保存路徑比較好

數(shù)據(jù)庫中使用blob字段。 不過建議還是存儲圖片路徑吧,數(shù)據(jù)庫的輸出流慢的多

java:servlet接收圖片,并把它保存到數(shù)據(jù)庫中

這種代碼網(wǎng)上不是一大片嗎

public boolean storeImage(File file){

純尺 try{

// 打開文件

FileInputStream fin = new FileInputStream(file);

// 建一個緩沖保存數(shù)據(jù)

ByteBuffer nbf = ByteBuffer.allocate((int) file.length());

byte array = new byte;

int offset = 0, length = 0;

薯老     // 讀存數(shù)據(jù)

while((length = fin.read(array)) > 0){

  if(length != 1024) nbf.put(array,0,length);

  else nbf.put(array);

  offset += length;

}

// 關(guān)閉文件

fin.close();

// 新建一個數(shù)組保存要寫的內(nèi)容

byte content = nbf.array();

String sql = “insert into images (bin_data) values (?) “;

PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setBytes(1,content);

pstmt.execute();

pstmt.close();

}catch(Exception e){

e.printStackTrace();

return false;

}

數(shù)褲升 return true;

    }

關(guān)于java數(shù)據(jù)庫存儲圖片的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標準機房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達10T,機柜接入千兆交換機,能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認可。


名稱欄目:Java數(shù)據(jù)庫實現(xiàn)圖片存儲詳解(java數(shù)據(jù)庫存儲圖片)
文章路徑:http://www.5511xx.com/article/cohehij.html