CLOB(キャラクタラージオブジェクト)の値は、最大で2,147,483,647の文字長とすることができます。CLOBはユニコードの文字情報を記録するとき使うことができます。このような情報には様々な文字からなるサイズの大きな文書などが考えられます。
CLOBの長さは数で与えられます。もしK、MやGが数のサフィックスに与えられた場合は、それぞれ1024、1024*1024、1024*1024*1024を意味します。
CLOBの長さは(ユニコードの)文字数をあらわします。{CLOB |CHARACTER LARGE OBJECT} [ ( 長さ [{K |M |G}] ) ]
長さを指定しない場合、CLOBの長さは2ギガ(2,147,483,647)バイトとなります。
java.sql.Clob
CLOB
CLOBへのハンドルを取得するには、java.sql.ResultSetにあるgetClobメソッドを使ってください。
import java.sql.*;
public class clob
{
public static void main(String[] args) {
try {
String url = "jdbc:derby:clobberyclob;create=true";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
Connection conn = DriverManager.getConnection(url);
Statement s = conn.createStatement();
s.executeUpdate("CREATE TABLE documents (id INT, text CLOB(64 K))");
conn.commit();
// --- ファイルを追加する。
java.io.File file = new java.io.File("asciifile.txt");
int fileLength = (int) file.length();
// - 最初に入力ストリームを作成する。
java.io.InputStream fin = new java.io.FileInputStream(file);
PreparedStatement ps = conn.prepareStatement("INSERT
INTO documents VALUES (?, ?)");
ps.setInt(1, 1477);
// - 入力パラメータの値を入力ストリームにする。
ps.setAsciiStream(2, fin, fileLength);
ps.execute();
conn.commit();
// --- 列を読む。
ResultSet rs = s.executeQuery("SELECT text FROM documents
WHERE id = 1477");
while (rs.next()) {
java.sql.Clob aclob = rs.getClob(1);
java.io.InputStream ip = rs.getAsciiStream(1);
int c = ip.read();
while (c > 0) {
System.out.print((char)c);
c = ip.read();
}
System.out.print("\n");
// ...
}
} catch (Exception e) {
System.out.println("Error! "+e);
}
}
}