JavaでCLOB型を文字列(String)に変換する方法をわかりやすく解説
CLOB(Character Large Object)は、SQLの組み込みデータ型の一つで、大量のテキストデータを格納するために使用されます。このデータ型を利用すると、最大2,147,483,647文字までのデータを保存することが可能です。
JDBC APIのjava.sql.Clobインターフェースが、このCLOBデータ型を表現します。なお、JDBCにおけるClobオブジェクトはSQLロケーター(locator)を使って実装されているため、実際のデータそのものではなく、SQL CLOBへの論理ポインターを保持している点に注意してください。
MySQLデータベースでは、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXTという4つの型によって、このCLOBデータ型がサポートされています。
CLOBデータ型を文字列に変換する手順
CLOB型のデータをJavaの文字列に変換するには、以下の3つのステップを実行します。
ステップ1:Clobオブジェクトを取得する
PreparedStatementインターフェースのgetClob()メソッド、またはgetCharacterStream()メソッドを使用して、テーブルからClob値を取得します。
Reader r = clob.getCharacterStream();
ステップ2:文字を読み取り、バッファに連結する
取得した文字ストリームから1文字ずつ読み込み、StringBuilderまたはStringBufferに順番に追加していきます。
int j = 0;
StringBuffer buffer = new StringBuffer();
int ch;
while ((ch = r.read())!=-1) {
buffer.append(""+(char)ch);
}
System.out.println(buffer.toString());
j++;
ステップ3:結果の文字列を表示・保存する
最後に、生成された文字列を表示するか、必要に応じて保存します。
System.out.println(buffer.toString());
サンプルプログラムによる実装例
それでは、実際に動作を確認してみましょう。まず、次のクエリを使用して、MySQLデータベース内にtechnologies_dataという名前のテーブルを作成します。
CREATE TABLE Technologies (Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT);
このテーブルの3番目のカラム「Article」には、CLOB型(LONGTEXT)のデータが格納されます。
以下のJDBCプログラムでは、最初にtechnologies_dataテーブルへレコードを挿入し、テキストファイルの内容をArticleカラム(CLOB型)に保存します。
続いて、テーブルからレコードを取得し、記事の名前と内容を表示します。ここでは、取得したCLOBのデータを文字列に変換して出力する処理を行っています。
import java.io.FileReader;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class ClobToString {
public static void main(String args[]) throws Exception {
// ドライバーの登録
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
// 接続の確立
String mysqlUrl = "jdbc:mysql://localhost/sampledatabase";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
// Statementオブジェクトの作成
Statement stmt = con.createStatement();
// データの挿入
String query = "INSERT INTO Technologies_data VALUES (?, ?, ?)";
PreparedStatement pstmt = con.prepareStatement(query);
pstmt.setString(1, "JavaFX");
pstmt.setString(2, "Java Library");
FileReader reader = new FileReader("E:\\images\\javafx_contents.txt");
pstmt.setClob(3, reader);
pstmt.execute();
pstmt.setString(1, "CoffeeScript");
pstmt.setString(2, "Scripting Language");
reader = new FileReader("E:\\images\\coffeescript_contents.txt");
pstmt.setClob(3, reader);
pstmt.execute();
pstmt.setString(1, "Cassandra");
pstmt.setString(2, "NoSQL Database");
reader = new FileReader("E:\\images\\cassandra_contents.txt");
pstmt.setClob(3, reader);
pstmt.execute();
// データの取得
ResultSet rs = stmt.executeQuery("select * from Technologies_data");
System.out.println("Contents of the table are: ");
while(rs.next()) {
System.out.println("Article: "+rs.getString("Name"));
Clob clob = rs.getClob("Article");
Reader r = clob.getCharacterStream();
StringBuffer buffer = new StringBuffer();
int ch;
while ((ch = r.read())!=-1) {
buffer.append(""+(char)ch);
}
System.out.println("Contents: "+buffer.toString());
System.out.println(" ");
}
}
}
実行結果
上記のプログラムを実行すると、以下のような出力が得られます。CLOBとして保存されていたテキストデータが、正しく文字列として読み出されていることが確認できます。
Connection established...... Contents of the table are: Article: JavaFX Contents: JavaFX is a Java library using which you can develop Rich Internet Applications. By using Java technology, these applications have a browser penetration rate of 76%. Article: CoffeeScript Contents: CoffeeScript is a lightweight language based on Ruby and Python which transcompiles (compiles from one source language to another) into JavaScript. It provides better syntax avoiding the quirky parts of JavaScript, still retaining the flexibility and beauty of the language. Article: Cassandra Contents: Apache Cassandra is a highly scalable, high-performance distributed database designed to handle large amounts of data across many commodity servers, providing high availability with no single point of failure. It is a type of NoSQL database. Let us first understand what a NoSQL database does.
-
JavaのMapをJSONに変換する3つの方法(Jackson・Gson・org.json)
JavaのMap(マップ)をJSONに変換する方法はいくつかあります。Javaでは、配列やMapとJSONの相互変換を行う場面が非常に多く、Web APIとのデータ連携などでも欠かせない処理です。 この記事では、代表的なライブラリであるJackson、Gson、org.jsonを使用して、JavaのMapをJSONに変換する3つの具体例をサンプルコード付きで解説します。 Jacksonを使ってJavaのMapをJSONに変換する 最初の例では、Jackson Core と Jackson Databind を使ってJavaのMapをJSONに変換します。 Jacksonライブラリを使用するには
-
Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説
Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare