mysqlに画像を挿入する方法

coldplay.xixi
coldplay.xixiオリジナル
2020-10-13 16:28:1912757ブラウズ

mysql に画像を挿入する方法: まずデータベースにテーブルを作成し、次に JDBC ドライバーをロードして接続を確立し、最後に SQL ステートメントを実行するための Statement インターフェイス クラスを作成します。

mysqlに画像を挿入する方法

mysql に画像を挿入する方法:

1. まず、データベースにテーブルを作成します。 test という名前のデータベースの下に pic というテーブルを作成しました。テーブルには、idpic、caption、img の 3 つの列が含まれています。このうち、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;

上記のステートメントをコマンド ラインに入力します (クエリ ブラウザがインストールされている場合は、リファレンス [1] の手順に従ってテーブルを作成できます。 )、実行、テーブルの作成は成功しました。

2. 画像ストレージ クラスの実装

テーブルが完成したら、データベースに画像を挿入する操作を完了する Java クラスの作成を開始します。 Java とデータベース間の接続は JDBC ドライバーを通じて実現されることがわかっています。私は MySQL Web サイトで提供されている MySQL Connector/J を使用していますが、他のタイプのドライバーを使用する場合は、以下の実装プロセスにいくつかの違いが生じる可能性があります。

2.1. JDBC ドライバーのロードと接続の確立

JDK で提供される DriverManager インターフェイスは、Java アプリケーションと JDBC ドライバー間の接続を管理するために使用されます。このインターフェイスを使用する前に、DriverManager は接続する JDBC ドライバーを認識する必要があります。最も簡単な方法は、Class.forName() を使用して、java.sql.Driver を実装するインターフェイス クラスを DriverManager に登録することです。 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文(プリコンパイル済みSQL文)を取得、(2)は挿入文の最初の疑問符の代入、(3)は、は 2 番目の割り当てです。 , (4) は 3 番目の割り当てです。このステップも言及することが最も重要です。使用されるメソッドは setBinaryStream() です。最初のパラメータ 3 は 3 番目の疑問符を参照します。fis はバイナリ ファイル ストリームです。 3 番目のパラメータは、このファイル ストリームの長さです。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。