# CLOBデータ型

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の型

java.sql.Clob

#### JDBC メタデータの型(java.sql.Types)

CLOB

CLOBへのハンドルを取得するには、java.sql.ResultSetにあるgetClobメソッドを使ってください。

#### 関連する情報

java.sql.Blobインターフェイスとjava.sql.Clobインターフェイスの対応を参照してください。

    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);
            }
        }
    }

親トピック: データ型