MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

JavaでMySQLデータベースに画像を挿入する方法を徹底解説【BLOB型の基本と手順】

MySQLで画像を保存するにはBLOB型を使う

MySQLデータベースに画像を保存する場合、一般的にはBLOB型が使用されます。そのため、あらかじめBLOB型のカラムを含むテーブルを作成しておく必要があります。以下は、画像挿入用テーブルの構造例です。

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| Name  | varchar(255) | YES  |     | NULL    |       |
| image | blob         | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+

JavaプログラムからMySQLデータベースに画像を挿入するには、以下の4つのステップに従ってください。

ステップ1:データベースに接続する

DriverManagerクラスのgetConnection()メソッドを使用すると、データベースに接続できます。

MySQLのURL(jdbc:mysql://localhost/sampleDB。sampleDBはデータベース名)、ユーザー名、パスワードを引数としてgetConnection()メソッドに渡し、MySQLデータベースへの接続を確立します。

String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

ステップ2:PreparedStatementを作成する

ConnectionインターフェースのprepareStatement()メソッドを使用して、PreparedStatementオブジェクトを作成します。このメソッドには、プレースホルダー(?)を含むINSERT文を引数として渡します。

PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyTable VALUES(?, ?)");

ステップ3:プレースホルダーに値を設定する

PreparedStatementインターフェースのセッターメソッドを使用して、プレースホルダーに値を設定します。カラムのデータ型に応じて適切なメソッドを選択してください。例えば、カラムがVARCHAR型の場合はsetString()メソッドを、INT型の場合はsetInt()メソッドを使用します。

BLOB型の場合は、setBinaryStream()メソッドまたはsetBlob()メソッドを使用して値を設定できます。これらのメソッドには、パラメータのインデックスを表す整数値と、InputStreamクラスのオブジェクトを引数として渡します。

pstmt.setString(1, "sample image");
// BLOB型の挿入
InputStream in = new FileInputStream("E:\\images\\cat.jpg");
pstmt.setBlob(2, in);

ステップ4:ステートメントを実行する

作成したPreparedStatementオブジェクトを、PreparedStatementインターフェースのexecute()メソッドを使用して実行します。

サンプルコード

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class InsertImageToMySqlDB {
    public static void main(String args[]) throws Exception {
        // ドライバの登録
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        // 接続の取得
        String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
        Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
        System.out.println("Connection established......");
        PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyTable VALUES(?,?)");
        pstmt.setString(1, "sample image");
        // BLOB型の挿入
        InputStream in = new FileInputStream("E:\\images\\cat.jpg");
        pstmt.setBlob(2, in);
        // ステートメントの実行
        pstmt.execute();
        System.out.println("Record inserted......");
    }
}

実行結果

Connection established......
Record inserted......

補足:新しいMySQL Connector/Jを使用する場合の注意点

MySQL Connector/J 8.0以降では、ドライバクラス名がcom.mysql.cj.jdbc.Driverに変更されている点に注意してください。また、JDBC 4.0以降の環境では、ドライバの登録は自動的に行われるため、明示的なregisterDriver()の呼び出しは省略可能です。さらに、保存する画像ファイルが大きい場合は、BLOB(最大64KB)ではなく、MEDIUMBLOB(最大16MB)やLONGBLOB(最大4GB)型のカラムを使用することを検討するとよいでしょう。

  1. JavaでMySQLに接続する方法を解説!JDBC接続の基本コード

    JavaとMySQLを接続するには? JavaアプリケーションからMySQLデータベースに接続するには、JDBC(Java Database Connectivity)を使用します。JDBCは、Javaからリレーショナルデータベースへアクセスするための標準APIであり、MySQL用のJDBCドライバ(Connector/J)をクラスパスに追加しておく必要があります。 以下は、Javaのコードを使ってMySQLに接続する基本的なサンプルです。 MySQL接続のサンプルコード import java.sql.Connection; import java.sql.DriverManager; p

  2. JavaでMySQLデータベースにNULL値を挿入する方法

    JavaからデータベースにNULL値を挿入したいケースはよくあります。その場合、PreparedStatementのsetNull()メソッドを使用します。基本的な構文は以下の通りです。ps.setNull(インデックス番号, Types.NULL);この記事では、実際にサンプルを通してNULL値の挿入手順を解説します。1. テーブルの作成まず、MySQLでテスト用のテーブルを作成します。mysql> create table DemoTable1893 ( FirstName varchar(20) ); Query OK, 0 rows affected (0