• 検索結果がありません。

QueryDataSet

ドキュメント内 jdbc.book (ページ 140-144)

DataSetの検索パ ラ メ ータは、 SQL 文、 ま たは dbKona の SQL 文用の抽象 オブジ ェ ク ト であ る SelectStmtオブジ ェ ク ト に よ って定義さ れます。

DataSetには、Valueオブジ ェ ク ト を含む Recordオブジ ェ ク ト が含まれま す。Recordには、 イ ンデ ッ ク ス位置 (0 が起点 ) を指定し てア ク セス し ます。

DataSetは、Schemaに よ っ て記述 さ れ、 Schema にバ イ ン ド さ れます。

Schema には、

DataSet

に表示さ れ る各データベース カ ラ ムの名前、 データ

型、 サ イ ズ、 順番な どの属性情報が格納 さ れます。Schema内のカ ラ ム名に は、 イ ンデッ ク ス位置 (1 が起点 ) を指定 し てア ク セ ス し ます。

DataSetク ラ ス (weblogic.db.jdbc.DataSet を参照 ) は、QueryDataSetおよ び TableDataSetの抽象的な親ク ラ スです。

QueryDataSet

QueryDataSetを使用する と 、 SQL ク エ リ の結果を、 イ ンデッ ク ス位置 (0 が起 点 ) を指定し てア ク セ スする Record の コ レ ク シ ョ ン と し て使用で き ます。

TableDataSet と は異な り 、QueryDataSetに対し て変更および追加し た内容は データベースに保存でき ません。

QueryDataSet と TableDataSetには、 機能的な違いが 2 つあ り ます。 1 番目の 相違点は、TableDataSetの変更内容はデータベースに保存でき る と い う 点で す。QueryDataSet

の Record も変更で き ますが、 その変更内容は保存で き ませ

ん。 2 番目の相違点は、QueryDataSetには、 複数のテーブルか ら のデータ を取

り 出せる と い う 点です。

dbKona API

QueryDataSetは、java.sql.Connectionの コ ンテキ ス ト 内で、 ま たは java.sql.ResultSetを使用し て作成 さ れます。 つま り 、 Connection オブ ジ ェ ク ト を引数 と し て QueryDataSetコ ン ス ト ラ ク タ に渡し ます。

QueryDataSetのデータ検索は、 SQL ク エ リ や SelectStmtオブジ ェ ク ト に よ っ て指定 さ れます。

QueryDataSetには、 Record オブジ ェ ク ト (0 が起点の イ ンデ ッ ク ス を指定 し てア ク セスする ) が含まれます。 Record オブジ ェ ク ト には Value オブジ ェ ク ト (1 が起点の イ ンデ ッ ク ス を指定し てア ク セスする ) が含まれます。

QueryDataSetは、 Schema に よ っ て記述 さ れます。 Schema には、

QueryDataSetの属性に関する情報が格納さ れます。 属性には、

QueryDataSetに表示 さ れる各データベース カ ラ ムの名前、 データ型、 サ イ ズ、 順番な どがあ り ます。

QueryDataSet

ク ラ ス (

weblogic.db.jdbc.QueryDataSet

を参照 ) には、

QueryDataSet

を作成、 保存、 および検索する ための メ ソ ッ ド があ り ます。

QueryDataSet

には、 結合用の SQL な ど、 任意の SQL を指定で き ます。 その

スーパーク ラ スであ る DataSet には、 レ コー ド キ ャ ッ シ ュの詳細を管理する ため の メ ソ ッ ド が含まれています。

TableDataSet

TableDataSet と QueryDataSetの機能的な違いは、TableDataSetの変更内容 はデータベースに保存でき る と い う 点です。TableDataSet を使用する と 、 Recordの値の更新、 新し い Recordの追加、 および Recordへの削除のマー ク付 けがで き ます。TableDataSet

全体を保存する場合は

TableDataSet

ク ラ スの

save() メ ソ ッ ド を使用し、 1 つのレ コー ド を保存する場合は Recordク ラ スの save() メ ソ ッ ド を使用し て、 最終的に変更内容をデータベースに保存でき ます。

さ ら に、TableDataSetに取 り 出 さ れるデータは、 定義上、 単一のデータベース テーブルか ら のデータ です。 複数のデータベース テーブルを結合し て

TableDataSet

にデータ を取 り 出すこ と はで き ません。

更新情報ま たは削除情報をデータベースに保存するには、KeyDefオブジ ェ ク ト を使用し て TableDataSet

を作成する必要があ り ます。 KeyDef オブジ ェ ク ト は、

UPDATE文ま たは DELETE文に WHERE句を作成する ためのユニーク なキーを指定 し ます。 挿入の操作には WHERE

句は必要ないので、 挿入だけを行 う 場合は、

KeyDefオブジ ェ ク ト は不要です。KeyDefのキーには、DBMSに よ っ て入力ま た は変更 さ れる カ ラ ムが含まれない よ う に し て く だ さ い。 dbKona では、 正し い WHERE句を作成する ためにキー カ ラ ムの値を把握し てお く 必要があ るか ら です。

ま た、 SQL 文の末尾を構成する任意の文字列で TableDataSetを限定する こ と も で き ます。 Oracle データベース で dbKona を使用し てい る場合、 た と えば

forUPDATE」 な どの文字列で TableDataSetを限定する と 、 ク エ リ に よ っ て検 索 さ れる レ コー ド を ロ ッ ク で き ます。

TableDataSet

は、

KeyDef

を使用し て作成で き ます。 KeyDef は dbKona のオブ

ジ ェ ク ト であ り 、 DBMS に更新情報および削除情報を保存する ためのユニーク なキーを設定する場合に使用 さ れます。 Oracle データベース を使用し てい る場合 は、TableDataSetの KeyDefを テーブルご と にユニー ク なキーであ る 「ROWID」 に設定で き ます。 その後、 「ROWID」 を含む一連の属性を使用し て、 TableDataSet を作成し ます。

TableDataSetは、java.sql.Connectionのコ ンテキ ス ト 内で作成さ れま す。 つま り 、Connection

オブジ ェ ク ト を引数 と し て

TableDataSet

コ ン ス

ト ラ ク タ に渡し ます。 そのデータ検索は、 DBMS テーブルの名前によ って指 定 さ れます。 更新情報および削除情報を保存する場合は、TableDataSet

作成時に KeyDefオブジ ェ ク ト を指定する必要があ り ます。TableDataSet を作成し た後で、where()メ ソ ッ ド および order() メ ソ ッ ド を使用し て ク エ

リ を修正し、WHERE

句および

ORDER BY

句を設定する こ と も でき ます。

TableDataSetには、 関連付け られているデフ ォル ト の SelectStmtオブ ジ ェ ク ト があ り ます。 こ のオブジ ェ ク ト は、 サンプルを使用し た ク エ リ 機能 を利用する場合に使用さ れます。

QueryDataSetには、Recordオブジ ェ ク ト (0 が起点の イ ンデ ッ ク ス を指定 し てア ク セ スする ) が含まれます。 Record オブジ ェ ク ト には Value オブジ ェ ク ト (1 が起点の イ ンデ ッ ク ス を指定し てア ク セ スする ) が含まれます。

TableDataSetの属性は、schemaに よ っ て記述さ れます。 schema には、

TableDataSetに表示さ れ るデータベース カ ラ ムの名前、 データ型、 サ イ ズ、 順番などの TableDataSetの属性情報が格納 さ れます。

TableDataSetは、 WebLogic Server サーバにキ ャ ッ シ ュ でき ます。

setRefreshOnSave() メ ソ ッ ド は、 保存中に挿入ま たは更新さ れた レ コー ド もすぐ に DBMS か ら更新さ れ る よ う に、TableDataSet

を設定し ます。

dbKona API

TableDataSetに DBMS に よ っ て変更 さ れたカ ラ ム (Microsoft SQL Server の IDENTITY カ ラ ムや挿入ま たは更新が き っかけ と なっ て変更 さ れたカ ラ ム など ) があ る場合は、 こ のフ ラ グ を設定し ます。

Refresh() メ ソ ッ ド は、 データベース に保存さ れた TableDataSet内のレ コー ド 、 つま り TableDataSet

で変更し た レ コー ド を更新し ます。 レ コー ド

の変更内容は失われ、 レ コー ド には更新済みのマーク が付き ます。 削除の マー ク が付け られた レ コー ド は、 更新 さ れません。TableDataSetに追加 さ れた レ コー ド の場合は、 更新元の DBMS の行が存在し ない こ と を示す例外 が生成さ れます。

saveWithoutStatusUpdate() メ ソ ッ ド は、TableDataSet内のレ コー ド の 保存状態を更新せずに DBMS に TableDataSet レ コー ド を保存し ます。 ト ラ ンザ ク シ ョ ン内で TableDataSet

レ コー ド を保存する場合には、 こ の メ

ソ ッ ド を使用し ます。 ト ラ ンザ ク シ ョ ンが ロールバ ッ ク さ れて も、

TableDataSet内のレ コー ド はデータベース と 一致し てお り 、 ト ラ ンザ ク シ ョ ンを再試行で き ます。 ト ラ ンザ ク シ ョ ンの コ ミ ッ ト 後、

updateStatus()を呼び出し て TableDataSet内のレ コー ド の保存状態を更 新し ます。 一度、saveWithoutStatusUpdate()

を使用し て レ コー ド を保存

する と 、 そのレ コー ド に対し て updateStatus()

を呼び出すま でレ コー ド は

変更で き ません。

TableDataSet.setOptimisticLockingCol() メ ソ ッ ド を使用する と 、 TableDataSetの 1 つのカ ラ ム をオプテ ィ ミ ス テ ィ ッ ク ロ ッ ク のカ ラ ム と し て指定でき ます。 こ のカ ラ ムを アプ リ ケーシ ョ ンで使用する と 、 データベー スか ら読み込んでか ら他のユーザがその行を変更し たかど う かを検出で き ま す。 dbKona では、 行が変更 さ れる たびに DBMS に よ っ てカ ラ ムが更新 さ れ る よ う にな ってい るので、TableDataSetの値に よ って こ のカ ラ ムが更新 さ れる こ と はあ り ません。 dbKona では、 レ コー ド ま たは TableDataSetを保 存する と き に UPDATE文の WHERE句で こ のカ ラ ムが使用さ れます。 別のユー ザがそのレ コー ド を変更し た場合は、 dbKona によ る更新は失敗し ます。 こ の場合、Record.refresh()を使用し てそのレ コー ド の新し い値を取 り 出し、

レ コー ド に変更を加えてか ら、 再度保存を試みる こ と ができ ます。

TableDataSet ク ラ ス (weblogic.db.jdbc.TableDataSetを参照 ) には、 次の メ ソ ッ ド があ り ます。

TableDataSet

を作成する ための メ ソ ッ ド

WHERE句および ORDER BY句を設定する ための メ ソ ッ ド

KeyDefを取得する ための メ ソ ッ ド

関連付け ら れた JDBC ResultSetを取得する ための メ ソ ッ ド

SelectStmt

を取得する ための メ ソ ッ ド

関連付け ら れた DBMS テーブル名を取得する ための メ ソ ッ ド

変更内容をデータベースに保存する ための メ ソ ッ ド

DBMS

か ら レ コー ド を更新する ための メ ソ ッ ド

関連する その他情報を取得する ための メ ソ ッ ド

そのスーパー ク ラ スであ る DataSetには、 レ コー ド キ ャ ッ シ ュ を管理する ため の メ ソ ッ ド が含まれています。

ドキュメント内 jdbc.book (ページ 140-144)