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

JDBCでBLOBデータ型の値をテーブルに挿入する方法|サンプルコード付き

BLOBデータ型とは

BLOB(Binary Large Object)は、画像・音声・動画などのバイナリデータをデータベースに格納するためのデータ型です。MySQLでは、BLOB型のカラムに画像ファイルなどを直接保存することができます。本記事では、JDBCを使ってBLOB型カラムに画像データを挿入する具体的な手順を解説します。

前提条件:テーブル構造

データベースには、以下のような構造を持つ「MyTable」というテーブルがすでに存在しているものとします。

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

BLOB型に値を挿入するためのPreparedStatementのメソッド

JDBCプログラムでBLOBデータ型のカラムに値を挿入するには、バイナリストリームデータを設定するためのメソッドを使用する必要があります。PreparedStatementインターフェースには、画像をテーブルに挿入するための以下のメソッドが用意されています。

1. setBinaryStream() メソッド

void setBinaryStream(int parameterIndex, InputStream x) メソッドは、指定された入力ストリームのデータ(ファイルの終端まで)を、指定されたインデックスのパラメータ値として設定します。

このメソッドには、以下のバリアントもあります。

  • void setBinaryStream(int parameterIndex, InputStream x, int length)

  • void setBinaryStream(int parameterIndex, InputStream x, long length)

2. setBlob() メソッド

void setBlob(int parameterIndex, Blob x) メソッドは、指定されたBlobオブジェクトを、指定されたインデックスのパラメータ値として設定します。

こちらにも、以下のバリアントが用意されています。

  • void setBlob(int parameterIndex, InputStream inputStream)

  • void setBlob(int parameterIndex, InputStream inputStream, long length)

BLOBデータ型への値の設定は、これらのメソッドのいずれかを使って行えます。

サンプルコード

以下の例では、setBinaryStream() メソッドを使用して、BLOBデータ型のカラムに画像ファイルの値を設定しています。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class InsertingValueForBlob {
   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......");

      //値の挿入
      String query = "INSERT INTO MyTable(Name,image) VALUES (?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "sample_image");
      FileInputStream fin = new FileInputStream("E:\\images\\cat.jpg");
      pstmt.setBinaryStream(2, fin);
      pstmt.execute();
      System.out.println("Record inserted .....");
   }
}

実行結果

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

挿入結果の確認

MySQL Workbenchでレコード内のBLOB値を確認すると、以下のように画像が正しく挿入されていることがわかります。

JDBCでBLOBデータ型の値をテーブルに挿入する方法|サンプルコード付き

  1. JDBCでCLOBデータ型の値をテーブルに挿入する方法【サンプルコード解説】

    この記事では、JDBCプログラムを使用してCLOBデータ型の値をデータベースのテーブルに挿入する方法を、具体的なサンプルコードとともに解説します。前提条件:サンプル用テーブルの準備まず、データベースに以下の構造を持つ「MyData」というテーブルが既に存在しているものと仮定します。+---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+----

  2. C言語で二項係数テーブルを出力するプログラムの作成方法

    正の整数値(ここでは「val」とします)が与えられたとき、0からvalまでの範囲にある任意のnとkに対する二項係数B(n, k)の値を計算し、テーブル形式で出力するのが本記事の目的です。 二項係数とは 二項係数(n, k)とは、「n個の選択肢の中からk個を選ぶ組み合わせ」の総数を表す値です。正の整数nおよびkに対する二項係数は、次の式で定義されます。 $$C_k^n=\frac{n!}{(n-k)!k!}$$ ただし、条件として n >= k が満たされている必要があります。 計算例 入力: B(9,2) 出力: $$B_2^9=\frac{9!}{(9-2)!2!}$$