ResultSet からの JSON 文書の取得

リレーショナル表を照会し、それによって取得した ResultSet を、JSON 形式でデータを保持する com.ibm.db2.jcc.json.DB2JSONResultSet オブジェクトに変換することができます。 DB2JSONResultSet オブジェクトを作成した後は、そのオブジェクトに対してメソッドを使用して、JSON 文書または JSON スニペットを取得できます。

プロシージャー

ResultSet オブジェクトから JSON 文書または JSON スニペットを取得するには、以下の手順を実行します。

  1. JSON 形式に変換するデータが格納されているリレーショナル表に対して照会を実行します。 テーブルの内容を ResultSet オブジェクトに取得します。
  2. ResultSet オブジェクトから DB2JSONResultSet オブジェクトを作成するには、以下のいずれかの方法を使用します。
    • スタンドアロン・アプリケーションの場合、ResultSet オブジェクトを DB2ResultSet オブジェクトにキャストし、DB2ResultSet.toJSONResultSet メソッドを実行して DB2JSONResultSet オブジェクトを取得します。 以下に例を示します。
      DB2JSONResultSet jsonrs = ((DB2ResultSet) rs).toJSONResultSet();
    • Web アプリケーションの場合、ResultSet オブジェクトを DB2ResultSet オブジェクトにアンラップします。 次に、DB2ResultSet.toJSONResultSet メソッドを実行して DB2JSONResultSet オブジェクトを取得します。 以下に例を示します。
      DB2ResultSet db2rs = rs.unwrap ( DB2ResultSet.class);
      DB2JSONResultSet jsonrs = db2rs.toJSONResultSet();
      

    ResultSet オブジェクト内の列を DB2JSONResultSet オブジェクト内のフィールドに変換するためのデータ・タイプ・マッピングは、以下のとおりです。

    Db2ResultSet カラムのデータ型 DB2JSONResultSet フィールドの JSON データ・タイプ
    • BIGINT
    • DECIMAL
    • DOUBLE
    • FLOAT
    • NUMERIC
    • SMALLINT
    数値
    • CHAR
    • VARCHAR
    ストリング
    制約事項:
    • DB2JSONResultSet オブジェクトの取得後は、ResultSet オブジェクトから直接データを取得することはできません。
    • ResultSet オブジェクトに BLOB、CLOB、XML、VARBINARY、または BINARY のデータ・タイプの列が含まれている場合、DB2JSONResultSet オブジェクトを作成することはできません。
  3. DB2JSONResultSet オブジェクトからデータを取得するには、適切な DB2JSONResultSet メソッドを使用してください。
    メソッド名 メソッドの機能
    getAsciiStream DB2JSONResultSet オブジェクトの内容を java.io.InputStream オブジェクトとして返します。
    getCharacterStream java.io.Reader オブジェクトを返します。アプリケーションはこのオブジェクトに対し、JSON 文書を増分的に読み取るためのメソッドを呼び出すことができます。
    getCurrentRow DB2JSONResultSet の現在行を JSON スニペットとして返します。
    next DB2JSONResultSet オブジェクト内の次の行にカーソルを移動します。
    toJSONString 現在行以降、DB2JSONResultSet オブジェクトの残りを String として返します。
  4. DB2JSONResultSet オブジェクトを閉じます。

以下の例でステートメントの右にある番号は、前述のステップに対応しています。

例: DB2JSONResultSet.getCurrentRow を使用して、JSON 文書の行を一度に 1 つずつ取得します。

sql = "SELECT EMPNO, SALARY FROM EMPLOYEE";
ResultSet rs = 
 stmt.executeQuery(sql);                                               1 
                                        // ResultSet contains a CHAR
                                        // and a DECIMAL column
DB2JSONResultSet jsonrs = ((DB2ResultSet) rs).toJSONResultSet();       2 
                                        // DB2JSONResultSet contains
                                        // String and Number fields
while(jsonrs.next()) {
 String row = json.getCurrentRow();                                    3 
 …
 // Process row
}
jsonrs.close();                         // Close the DB2JSONResultSet  4  

例: DB2JSON.toJSONString を使用して、JSON 文書全体を String に取り込みます。

sql = "SELECT EMPNO, PHONENO FROM EMPLOYEE";
ResultSet rs = 
 stmt.executeQuery(sql);                                               1 
                                         // ResultSet contains a CHAR
                                         // and a DECIMAL column
DB2JSONResultSet jsonrs = ((DB2ResultSet) rs).toJSONResultSet();       2 
                                         // DB2JSONResultSet contains
                                         // String and Number fields
String jsondoc = json.toJSONString();                                  3 
 …
// Process contents of string 
jsonrs.close();                         // Close the DB2JSONResultSet  4  

例: DB2JSONResultSet.getAsciiStream を使用して、JSON 文書を AsciiStream に読み込みます。

sql = "SELECT EMPNO, PHONENO FROM EMPLOYEE";
ResultSet rs = 
 stmt.executeQuery(sql);                                               1 
                                        // ResultSet contains a CHAR
                                        // and a DECIMAL column
DB2JSONResultSet jsonrs = ((DB2ResultSet) rs).toJSONResultSet();       2 
                                        // DB2JSONResultSet contains
                                        // String and Number fields
InputStream is = jsonrs.getAsciiStream();                              3 
char  [] buff = new char [1024]; 
int  b = 0;
do  {                                   // Read and print AsciiStream contents
 b = is.read ();
 if  (b > 0) {
  System.out.print ((char)b);
 }
} while (b > 0);                             
is.close();
jsonrs.close();                         // Close the DB2JSONResultSet  4  

例: DB2JSONResultSet.getCharacterStream を使用して、JSON 文書全体を文字ストリームに取り込みます。 その後、文書の内容を読み取ってバッファーに入れ、印刷します。

sql = "SELECT EMPNO, PHONENO FROM EMPLOYEE";
ResultSet rs = 
 stmt.executeQuery(sql);                                               1 
                                        // ResultSet contains a CHAR
                                        // and a DECIMAL column
DB2JSONResultSet jsonrs = ((DB2ResultSet) rs).toJSONResultSet();       2 
                                        // DB2JSONResultSet contains
                                        // String and Number fields
Stream reader = jsonrs.getCharacterStream ();                          3 
char [] buff = new char[1024];
int len = 0;
do {                                    // Read and print CharacterStream contents
 len = reader.read(buff);
 if (len > 0) {
  System.out.println(String.copyValueOf(buff,0,len));
 }
}
reader.close();
jsonrs.close();                         // Close the DB2JSONResultSet  4