JDBCのgetCharacterStream()メソッドでテーブルからClob値を取得する方法【サンプルコード解説】
JDBCのResultSetインターフェースには、データベースのテーブルからCLOB型(長文テキスト)のデータを取得するためのメソッドとして、getClob()とgetCharacterStream()の2つが用意されています。
どちらのメソッドも、引数に列のインデックスを表す整数(または列名を表す文字列)を指定でき、該当する列の値を取得します。両者の違いは戻り値の型です。getClob()メソッドがjava.sql.Clobオブジェクトを返すのに対し、getCharacterStream()メソッドは文字ストリームを扱うjava.io.Readerクラスのオブジェクトを直接返します。そのため、取得したデータをそのままファイルへ書き出すようなケースでは、getCharacterStream()の方がシンプルに処理できます。
サンプル:テーブルの準備
ここでは、次のような構造を持つ「MyData」というテーブルがデータベース内に作成されているものとします。
+---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | Name | varchar(255) | YES | | NULL | | | Article | longtext | YES | | NULL | | +---------+--------------+------+-----+---------+-------+
このテーブルには、「JavaFX」という名前とともに大量のテキストデータが登録されています。以下のプログラムでは、getString()メソッドとgetCharacterStream()メソッドを使ってMyDataテーブルの内容を取得します。
サンプルプログラム
import java.io.FileWriter;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class RetrievingClob_CharStream {
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......");
// Statementオブジェクトの生成
Statement stmt = con.createStatement();
// データの取得
ResultSet rs = stmt.executeQuery("select * from MyData");
int j = 0;
System.out.println("Contents of the table are: ");
while(rs.next()) {
System.out.println(rs.getString("Name"));
Clob clob = rs.getClob("Article");
Reader r = clob.getCharacterStream();
String filePath = "E:\\Data\\clob_output"+j+".txt";
FileWriter writer = new FileWriter(filePath);
int i;
while ((i=r.read())!=-1) {
writer.write(i);
}
writer.close();
System.out.println(filePath);
j++;
}
}
}
実行結果
Connection established...... Contents of the table...... JavaFX E:\Data\clob_output0.txt
実行後に出力されたパスのファイルを開くと、テーブルから取得したClobの内容を以下のように確認できます。

ポイントまとめ
- getClob():Clobオブジェクトとして受け取り、length()やgetSubString()などのメソッドで操作したい場合に便利です。
- getCharacterStream():Readerとして直接ストリーム処理できるため、ファイルへの書き出しや逐次読み込みに適しています。
- 実際の開発では、リソースの解放漏れを防ぐためにtry-with-resources構文の利用が推奨されます。
-
JDBCでデータベースからファイル(CLOB)を取得する方法
JDBCでデータベースからファイルを取得するには?データベースには、ファイルの内容をCLOB型として格納することが一般的です。ResultSetインターフェースには、このCLOB型のデータを取得するためのgetClob()メソッドとgetCharacterStream()メソッドが用意されています。どちらのメソッドも、引数として列のインデックスを表す整数、または列名を表す文字列を受け取り、指定された列の値を取得します。両者の違いは、getClob()メソッドがClobオブジェクトを返すのに対し、getCharacterStream()メソッドはCLOB型の内容を保持するReaderオブジェクト
-
JDBCでCLOBデータ型の値をテーブルに挿入する方法【サンプルコード解説】
この記事では、JDBCプログラムを使用してCLOBデータ型の値をデータベースのテーブルに挿入する方法を、具体的なサンプルコードとともに解説します。前提条件:サンプル用テーブルの準備まず、データベースに以下の構造を持つ「MyData」というテーブルが既に存在しているものと仮定します。+---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+----