Heim > Datenbank > MySQL-Tutorial > So fügen Sie Bilder in MySQL ein

So fügen Sie Bilder in MySQL ein

coldplay.xixi
Freigeben: 2020-10-13 16:28:19
Original
12744 Leute haben es durchsucht

So fügen Sie Bilder in MySQL ein: Erstellen Sie zuerst eine Tabelle in der Datenbank, laden Sie dann den JDBC-Treiber und stellen Sie eine Verbindung her. Erstellen Sie schließlich eine Statement-Schnittstellenklasse, um SQL-Anweisungen auszuführen.

So fügen Sie Bilder in MySQL ein

So fügen Sie Bilder in MySQL ein:

1 Erstellen Sie zunächst eine Tabelle in der Datenbank. Ich habe eine Tabelle namens pic unter der Datenbank namens test erstellt. Die Tabelle enthält 3 Spalten: idpic, caption und img. Unter diesen ist idpic der Primärschlüssel, caption ist die Beschreibung des Bildes und img ist die Bilddatei selbst. Die SQL-Anweisung zum Erstellen der Tabelle lautet wie folgt:

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;
Nach dem Login kopieren

Geben Sie die obige Anweisung in die Befehlszeile ein (wenn Query Brower installiert ist, können Sie den Anweisungen in Referenz [1] folgen, um die Tabelle zu erstellen, was praktischer ist. ), ausführen, Tabelle erfolgreich erstellen.

2. Implementieren Sie die Bildspeicherklasse

Nachdem die Tabelle fertig ist, beginnen wir mit dem Schreiben einer Java-Klasse, um den Vorgang des Einfügens von Bildern in die Datenbank abzuschließen. Wir wissen, dass die Verbindung zwischen Java und Datenbank über den JDBC-Treiber hergestellt wird. Ich verwende den MySQL Connector/J, der auf der MySQL-Website bereitgestellt wird. Wenn Sie andere Treibertypen verwenden, kann es zu einigen Unterschieden im folgenden Implementierungsprozess kommen.

2.1. JDBC-Treiber laden und Verbindung herstellen

Die im JDK bereitgestellte DriverManager-Schnittstelle wird zum Verwalten der Verbindung zwischen Java-Anwendung und JDBC-Treiber verwendet. Bevor diese Schnittstelle verwendet werden kann, muss DriverManager den zu verbindenden JDBC-Treiber kennen. Die einfachste Methode besteht darin, Class.forName() zu verwenden, um die Schnittstellenklasse, die java.sql.Driver implementiert, bei DriverManager zu registrieren. Für MySQL Connector/J lautet der Name dieser Klasse com.mysql.jdbc.Driver.

Das folgende einfache Beispiel zeigt, wie Sie den Connector/J-Treiber registrieren.

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
    }
}
Nach dem Login kopieren

Nachdem wir den Treiber bei DriverManager registriert haben, können wir die Verbindung zur Datenbank herstellen, indem wir die Methode DriverManager.getConnection() aufrufen. Tatsächlich existiert diese Aussage im obigen Beispiel, sie ist jedoch auskommentiert. In der späteren Implementierung wird es ein vollständiges Beispiel geben.

2.2. PreparedStatement

Nach Abschluss der obigen Schritte können wir über die hergestellte Verbindung eine Statement-Schnittstellenklasse erstellen, um einige SQL-Anweisungen auszuführen. Im folgenden Beispiel verwende ich PreparedStatement und CallableStatement, die einige gespeicherte Prozeduren und Funktionen ausführen können, auf die ich hier nicht näher eingehen werde.

Der folgende Codeausschnitt fügt einen Datensatz in die Bildtabelle ein. Unter anderem ruft das Objekt con der Verbindungsschnittstelle unter (1) die vorkompilierte SQL-Anweisung (vorkompilierte SQL-Anweisung) ab, indem es die Methode „prepareStatement“ aufruft (2) die Zuweisung des ersten Fragezeichens der Einfügeanweisung und (3) ist die zweite Zuweisung. Dieser Schritt ist auch der wichtigste zu erwähnen. Der erste Parameter 3 bezieht sich auf einen binären Dateistream. Der dritte Parameter ist die Länge dieses Dateistreams.

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();
…
Nach dem Login kopieren

2.3, vollständiger Code

Der vollständige Code ist oben aufgeführt.

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.");
    }
  }
}
Nach dem Login kopieren

Weitere verwandte kostenlose Lernempfehlungen: MySQL-Tutorial(Video)

Das obige ist der detaillierte Inhalt vonSo fügen Sie Bilder in MySQL ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage