這篇文章將為大家詳細(xì)講解有關(guān)怎么基于java向mysql數(shù)據(jù)庫中存取圖片,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)建站是一家專業(yè)提供綏陽企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計制作、成都網(wǎng)站制作、HTML5、小程序制作等業(yè)務(wù)。10年已為綏陽眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進(jìn)行中。學(xué)mysql的時候都是做個表格,放的也都是文字內(nèi)容,雖然我知道長篇的文章和圖片或者視頻的都是用過文件夾的方式存儲的,再講文件路徑存進(jìn)數(shù)據(jù)庫中。但還是想試試直接往mysql數(shù)據(jù)庫中存取圖片。這里我用的是java語言和jdbc實現(xiàn)的
mysql數(shù)據(jù)庫中有一個類型是Blob類型,這是一個二進(jìn)制類型,通常我們會將圖片或音像文件轉(zhuǎn)成二進(jì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(); } } }
關(guān)于“怎么基于java向mysql數(shù)據(jù)庫中存取圖片”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。