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

JDBCでデータベースからファイル(CLOB)を取得する方法

JDBCでデータベースからファイルを取得するには?

データベースには、ファイルの内容をCLOB型として格納することが一般的です。ResultSetインターフェースには、このCLOB型のデータを取得するためのgetClob()メソッドとgetCharacterStream()メソッドが用意されています。

どちらのメソッドも、引数として列のインデックスを表す整数、または列名を表す文字列を受け取り、指定された列の値を取得します。

両者の違いは、getClob()メソッドがClobオブジェクトを返すのに対し、getCharacterStream()メソッドはCLOB型の内容を保持するReaderオブジェクトを返すという点です。

テーブル構成の例

ここでは、データベースに次のような構成の「Articles」テーブルを作成していると仮定します。

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

さらに、このテーブルには「article1」「article2」「article3」という名前で3件の記事が登録されているものとします。

サンプルプログラム

以下のプログラムでは、getString()メソッドとgetClob()メソッドを使用してArticlesテーブルの内容を取得し、指定したファイルに保存しています。

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 RetrievingFileFromDatabase {
   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 Articles");
      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 reader = clob.getCharacterStream();
         String filePath = "E:\\Data\\clob_output"+j+".txt";
         FileWriter writer = new FileWriter(filePath);
         int i;
         while ((i = reader.read())!=-1) {
            writer.write(i);
         }
         writer.close();
         System.out.println(filePath);
         j++;
      }
   }
}

実行結果

Connection established......
Contents of the table are:
article1
E:\Data\clob_output0.txt
article2
E:\Data\clob_output1.txt
article3
E:\Data\clob_output2.txt

処理の流れのポイント

このプログラムの動作を理解するうえで重要なポイントは以下の3点です。

  • ドライバの登録と接続:registerDriver()でMySQLドライバを登録し、getConnection()でデータベースへの接続を確立します。
  • CLOBデータの取得:rs.getClob("Article")でClobオブジェクトを取得し、その後getCharacterStream()を呼び出してReaderオブジェクトに変換することで、文字ストリームとして内容を読み取れるようにします。
  • ファイルへの書き込み:Readerから1文字ずつ読み込み、FileWriterを使ってローカルのテキストファイルに書き出します。すべての行を処理したらwriter.close()でリソースを必ず解放しましょう。

このように、getClob()とgetCharacterStream()を組み合わせることで、データベース内にCLOB型として保存された大きなテキストデータやファイルの中身を簡単に取り出し、任意の場所にファイルとして復元できます。

  1. JDBCを使ってMySQLデータベースにファイルを保存・挿入する方法

    一般的に、ファイルの内容はMySQLデータベースでは Clob 型(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)のカラムに保存されます。 JDBCはClob型をサポートしており、これを利用することでファイルの内容をデータベースのテーブルに格納できます。 PreparedStatement インターフェースが提供する setCharacterStream() メソッドは、パラメータのインデックス(位置)を表す整数と、Readerオブジェクトを引数として受け取ります。 このメソッドを使うと、指定したインデックスのプレースホルダ(?)に対して、Readerオブジェクト(ファイ

  2. JSPでファイルアップロードを実装する方法|HTMLフォームとサーバーサイド処理の完全解説

    JSPはHTMLフォームタグと組み合わせることで、ユーザーがサーバーへファイルをアップロードできる仕組みを簡単に実装できます。アップロード対象はテキストファイルだけでなく、バイナリファイルや画像ファイルなど、あらゆる種類のドキュメントに対応可能です。 ファイルアップロードフォームの作成 まずは、ファイルアップロード用フォームの作成方法を見ていきましょう。以下のポイントは必ず押さえておく必要があります。 フォームの method 属性は必ず POST を指定します。GETメソッドは使用できません。 フォームの enctype 属性には multipart/form-data を設定します。 フ