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

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の内容を以下のように確認できます。

JDBCのgetCharacterStream()メソッドでテーブルからClob値を取得する方法【サンプルコード解説】

ポイントまとめ

  • getClob():Clobオブジェクトとして受け取り、length()やgetSubString()などのメソッドで操作したい場合に便利です。
  • getCharacterStream():Readerとして直接ストリーム処理できるため、ファイルへの書き出しや逐次読み込みに適しています。
  • 実際の開発では、リソースの解放漏れを防ぐためにtry-with-resources構文の利用が推奨されます。
  1. JDBCでデータベースからファイル(CLOB)を取得する方法

    JDBCでデータベースからファイルを取得するには?データベースには、ファイルの内容をCLOB型として格納することが一般的です。ResultSetインターフェースには、このCLOB型のデータを取得するためのgetClob()メソッドとgetCharacterStream()メソッドが用意されています。どちらのメソッドも、引数として列のインデックスを表す整数、または列名を表す文字列を受け取り、指定された列の値を取得します。両者の違いは、getClob()メソッドがClobオブジェクトを返すのに対し、getCharacterStream()メソッドはCLOB型の内容を保持するReaderオブジェクト

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

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