Maison  >  Article  >  base de données  >  Comment insérer des images dans MySQL

Comment insérer des images dans MySQL

coldplay.xixi
coldplay.xixioriginal
2020-10-13 16:28:1912733parcourir

Comment insérer des images dans MySQL : créez d'abord une table dans la base de données ; puis chargez le pilote JDBC et établissez une connexion ; enfin créez une classe d'interface Statement pour exécuter les instructions SQL.

Comment insérer des images dans MySQL

Comment insérer des images dans MySQL :

1. Tout d'abord, créez une table dans la base de données. J'ai créé une table appelée pic sous la base de données nommée test. Le tableau comprend 3 colonnes, idpic, caption et img. Parmi eux, idpic est la clé primaire, la légende est la description de l'image et img est le fichier image lui-même. L'instruction SQL pour créer la table est la suivante :

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;

Entrez l'instruction ci-dessus dans la ligne de commande (si Query Brower est installé, vous pouvez suivre les instructions dans la référence [1] pour créer la table, qui être plus pratique.) , exécution, la création de la table est réussie.

2. Implémenter la classe de stockage d'images

Une fois le tableau terminé, nous commençons à écrire une classe Java pour terminer l'opération d'insertion d'images dans la base de données. Nous savons que la connexion entre Java et la base de données est réalisée via le pilote JDBC. J'utilise le connecteur MySQL/J fourni sur le site Web MySQL. Si vous utilisez d'autres types de pilotes, il peut y avoir quelques différences dans le processus d'implémentation suivant.

2.1. Charger le pilote JDBC et établir la connexion

L'interface DriverManager fournie dans JDK est utilisée pour gérer la connexion entre l'application Java et le pilote JDBC. Avant d'utiliser cette interface, DriverManager doit connaître le pilote JDBC à connecter. La méthode la plus simple consiste à utiliser Class.forName() pour enregistrer la classe d'interface qui implémente java.sql.Driver avec DriverManager. Pour MySQL Connector/J, le nom de cette classe est com.mysql.jdbc.Driver.

L'exemple simple suivant illustre comment enregistrer le pilote Connector/J.

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
    }
}

Après avoir enregistré le pilote auprès de DriverManager, nous pouvons obtenir la connexion à la base de données en appelant la méthode DriverManager.getConnection(). En fait, cette affirmation existe dans l’exemple ci-dessus, mais elle a été commentée. Il y aura un exemple complet dans la mise en œuvre ultérieure.

2.2. PreparedStatement

Après avoir terminé les étapes ci-dessus, nous pouvons créer une classe d'interface Statement via la connexion établie pour exécuter certaines instructions SQL. Dans l'exemple suivant, j'utilise PreparedStatement et CallableStatement, qui peuvent exécuter certaines procédures et fonctions stockées. Je n'entrerai pas dans les détails ici.

L'extrait de code suivant insère un enregistrement dans la table pic. Parmi eux, l'objet con de l'interface Connection en (1) obtient l'instruction SQL précompilée (instruction SQL précompilée) en appelant la méthode prepareStatement (2) est l'affectation du premier point d'interrogation de l'instruction insert, et (3) est la deuxième affectation. , (4) est la troisième. Cette étape est également la plus importante à mentionner. La méthode utilisée est setBinaryStream(). Le premier paramètre 3 fait référence au troisième point d'interrogation. Le troisième paramètre est la longueur de ce flux de fichier.

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. Code complet

Le code complet est répertorié ci-dessus.

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.");
    }
  }
}

Plus de recommandations d'apprentissage gratuites associées : tutoriel mysql(vidéo)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn