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)型のカラムを使用することを検討するとよいでしょう。
-
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
-
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