JDBCでCLOBデータ型の値をテーブルに挿入する方法【サンプルコード解説】
この記事では、JDBCプログラムを使用してCLOBデータ型の値をデータベースのテーブルに挿入する方法を、具体的なサンプルコードとともに解説します。
前提条件:サンプル用テーブルの準備
まず、データベースに以下の構造を持つ「MyData」というテーブルが既に存在しているものと仮定します。
+---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | Article | longtext | YES | | NULL | | +---------+--------------+------+-----+---------+-------+
「Article」カラムはlongtext型(MySQLにおけるCLOB相当)として定義されており、大きなテキストデータを格納できます。
CLOB型への値挿入に使えるJDBCのメソッド
JDBCプログラムでCLOBデータ型に値を挿入するには、ファイルの内容を読み込んでデータベースの行に設定できるメソッドを使用する必要があります。これらのメソッドはPreparedStatementインターフェースによって提供されています。
1. setCharacterStream() メソッド
void setCharacterStream(int parameterIndex, Reader reader) メソッドは、Readerオブジェクトの内容を、指定されたインデックスのパラメータ値として設定します。このメソッドには以下のバリエーションもあります。
- void setCharacterStream(int parameterIndex, Reader reader, int length)
- void setCharacterStream(int parameterIndex, Reader reader, long length)
2. setClob() メソッド
void setClob(int parameterIndex, Clob x) メソッドは、指定されたjava.sql.Clobオブジェクトを、指定されたインデックスのパラメータ値として設定します。こちらにも以下のバリエーションがあります。
- void setClob(int parameterIndex, Reader reader)
- void setClob(int parameterIndex, Reader reader, long length)
CLOBデータ型への値設定は、これらのいずれかのメソッドを使って行うことができます。
実装例:setClob()メソッドを使った挿入処理
以下の例では、setClob()メソッドを使用してCLOBデータ型に値を設定しています。テキストファイルの内容をそのままデータベースへ登録する典型的なパターンです。
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class InsertingValueInClob {
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 MyData(Name, Article ) VALUES (?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, "JavaFX");
FileReader reader = new FileReader("E:\\images\\javafx.txt");
pstmt.setClob(2, reader);
pstmt.execute();
System.out.println("Data inserted");
}
}実行結果
Connection established...... Table Created...... Contents of the table are: JavaFX E:\images\MyData_clob_output1.txt
挿入結果の確認方法
MySQL Workbenchなどでレコード内のCLOB値を確認すると、テキストファイルから読み込まれたデータが正しく挿入されていることがわかります。大量のテキストデータでも、この方法ならメモリ上に全容を展開することなくストリーム経由で効率的に登録できるのがポイントです。
-
JDBCでBLOBデータ型の値をテーブルに挿入する方法|サンプルコード付き
BLOBデータ型とはBLOB(Binary Large Object)は、画像・音声・動画などのバイナリデータをデータベースに格納するためのデータ型です。MySQLでは、BLOB型のカラムに画像ファイルなどを直接保存することができます。本記事では、JDBCを使ってBLOB型カラムに画像データを挿入する具体的な手順を解説します。前提条件:テーブル構造データベースには、以下のような構造を持つ「MyTable」というテーブルがすでに存在しているものとします。+-------+--------------+------+-----+---------+-------+ | Field | Type
-
JDBCのgetCharacterStream()メソッドでテーブルからClob値を取得する方法【サンプルコード解説】
JDBCのResultSetインターフェースには、データベースのテーブルからCLOB型(長文テキスト)のデータを取得するためのメソッドとして、getClob()とgetCharacterStream()の2つが用意されています。 どちらのメソッドも、引数に列のインデックスを表す整数(または列名を表す文字列)を指定でき、該当する列の値を取得します。両者の違いは戻り値の型です。getClob()メソッドがjava.sql.Clobオブジェクトを返すのに対し、getCharacterStream()メソッドは文字ストリームを扱うjava.io.Readerクラスのオブジェクトを直接返します。そのため