mysql插入圖片的方法:首先要在資料庫中建表;然後裝載JDBC驅動,建立連接;最後創建Statement接口類,來執行SQL語句即可。
mysql插入圖片的方法:
1、首先,先要在資料庫中建立表格。我在名為test的資料庫下建立了一個叫pic的表。該表包括3列,idpic, caption和img。其中idpic是主鍵,caption是對圖片的表述,img是圖像檔本身。建表的SQL語句如下:
DROP TABLE IF EXISTS `test`.`pic`; CREATE TABLE `test`.`pic` ( `idpic` int(11) NOT NULL auto_increment, `caption` varchar(45) NOT NULL default '', `img` longblob NOT NULL, PRIMARY KEY (`idpic`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
將上面的語句輸入到命令列中(如果安裝了Query Brower,你可以按照參考[1]中的指示來建立表,那樣會更加方便。) ,執行,表建立成功。
2、實作影像儲存類別
表完成後,我們就開始寫個Java類,來完成向資料庫中插入圖片的操作。我們知道,Java與資料庫連線是透過JDBC driver來實現的。我使用的是MySQL網站上提供的MySQL Connector/J,如果你用的是其他類型的driver, 在下面的實作過程中可能會有些許差別。
2.1、裝載JDBC驅動,建立連線
JDK中提供的DriverManager介面用來管理Java Application 和 JDBC Driver之間的連線。在使用這個介面之前, DriverManager需要知道要連接的JDBC 驅動。最簡單的方法就是用Class.forName()來向DriverManager註冊實作了java.sql.Driver 的介面類別。對MySQL Connector/J來說,這個類別的名字叫做com.mysql.jdbc.Driver。
下面這個簡單的範例說明了怎樣來註冊Connector/J Driver。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class LoadDriver { public static void main(String[] args) { try { // The newInstance() call is a work around for some // broken Java implementations Class.forName("com.mysql.jdbc.Driver").newInstance(); // Connection con = DriverManager.getConnection(……) // …… } catch (Exception ex) { // handle the error } }
向DriverManager註冊了驅動程式後,我們就可以透過呼叫 DriverManager.getConnection()方法來取得和資料庫的連線。其實在上面的例子中就有這條語句,只不過被註解掉了。在後面的實作中會有完整的例子。
2.2、PreparedStatement
完成上面的步驟後,我們就可以同過建立的連線建立Statement介面類,來執行一些SQL語句了。在下面的例子,我用的是PreparedStatement,還有CallableStatement,它可以執行一些預存程序和函數,這裡不多講了。
下面的程式碼片段是向pic表插入一筆記錄。其中(1)處Connection介面的物件con透過呼叫prepareStatement 方法得到預編譯的SQL 語句(precompiled SQL statement);(2)處是為該insert語句的第一個問號賦值,(3)為第二個賦值,(4)為第三個,這步也是最該一提的,用的方法是setBinaryStream(),第一個參數3是指第三個問號,fis是一個二進位檔案流,第三個參數是該文件流的長度。
PreparedStatement ps; … ps = con.prepareStatement("insert into PIC values (?,?,?)"); // (1) ps.setInt(1, id); //(2) ps.setString(2, file.getName()); (3) ps.setBinaryStream(3, fis, (int)file.length()); (4) ps.executeUpdate(); …
2.3、完整程式碼
上面列出了完整的程式碼。
package com.forrest.storepic; import java.io.File; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * This class describes how to store picture file into MySQL. * @author Yanjiang Qian * @version 1.0 Jan-02-2006 */ public class StorePictures { private String dbDriver; private String dbURL; private String dbUser; private String dbPassword; private Connection con; private PreparedStatement ps; public StorePictures() { dbDriver = "com.mysql.jdbc.Driver"; dbURL = "jdbc:mysql://localhost:3306/test"; dbUser = "root"; dbPassword = "admin"; initDB(); } public StorePictures(String strDriver, String strURL, String strUser, String strPwd) { dbDriver = strDriver; dbURL = strURL; dbUser = strUser; dbPassword = strPwd; initDB(); } public void initDB() { try { // Load Driver Class.forName(dbDriver).newInstance(); // Get connection con = DriverManager.getConnection(dbURL, dbUser, dbPassword); } catch(ClassNotFoundException e) { System.out.println(e.getMessage()); } catch(SQLException ex) { // handle any errors System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } catch (Exception e) { System.out.println(e.getMessage()); } } public boolean storeImg(String strFile) throws Exception { boolean written = false; if (con == null) written = false; else { int id = 0; File file = new File(strFile); FileInputStream fis = new FileInputStream(file); try { ps = con.prepareStatement("SELECT MAX(idpic) FROM PIC"); ResultSet rs = ps.executeQuery(); if(rs != null) { while(rs.next()) { id = rs.getInt(1)+1; } } else { return written; } ps = con.prepareStatement("insert " + "into PIC values (?,?,?)"); ps.setInt(1, id); ps.setString(2, file.getName()); ps.setBinaryStream(3, fis, (int) file.length()); ps.executeUpdate(); written = true; } catch (SQLException e) { written = false; System.out.println("SQLException: " + e.getMessage()); System.out.println("SQLState: " + e.getSQLState()); System.out.println("VendorError: " + e.getErrorCode()); e.printStackTrace(); } finally { ps.close(); fis.close(); // close db con con.close(); } } return written; } /** * Start point of the program * @param args CMD line */ public static void main(String[] args) { if(args.length != 1) { System.err.println("java StorePictures filename"); System.exit(1); } boolean flag = false; StorePictures sp = new StorePictures(); try { flag = sp.storeImg(args[0]); } catch (Exception e) { e.printStackTrace(); } if(flag) { System.out.println("Picture uploading is successful."); } else { System.out.println("Picture uploading is failed."); } } }
更多相關免費學習推薦:##mysql教學(影片)
以上是mysql中怎樣插入圖片的詳細內容。更多資訊請關注PHP中文網其他相關文章!