SelectStmt
手順 7. 変更内容の検証
レコードを 1 つだけ取り出す場合のサンプルを以下に示します。この方法は、1 レコードの変更内容を検証するには、効率的な方法です。このサンプルでは、
query-by-example(QBE)の句を使用して TableDataSet
から関心のあるレ
コードだけを取り出しています。TableDataSet tds2 = new TableDataSet(conn, "empdemo");
tds2.where("empno = 8000") .fetchRecords();
最後の手順として、各手順の後、および各 save()
メソッドの後に作成した
「insert」、「update」、および「delete」の各文字列の後にクエリ結果を表示で きます。結果を表示する htmlKona の使用方法については、前のチュートリアル の「コードのまとめ」を参照してください。
DataSet
の操作を終了したら、次のように
close()メソッドを使用して各 DataSet を閉じます。
tds.close();
tds2.close();
コードのまとめ
次に、この節で説明した概念を使用するサンプル コードを示します。
package tutorial.dbkona;
import weblogic.db.jdbc.*;
import java.sql.*;
import java.util.Properties;
public class rowid {
public static void main(String[] argv) throws Exception
{
Driver myDriver = (Driver)
Class.forName("weblogic.jdbc.oci.Driver").newInstance();
conn =
myDriver.connect("jdbc:weblogic:oracle:DEMO", "scott",
"tiger");
// ここで、レコードを 100 個挿入する
TableDataSet ts1 = new TableDataSet(conn, "empdemo");
7 dbKona の使い方
Record rec = ts1.addRecord();
rec.setValue("empid", i)
.setValue("name", "Person " + i) .setValue("dept", i);
}
// 新しいレコードを保存する。dbKona は選択的に保存を行う // つまり、TableDataSet 内の変更されたレコードだけを保存し、
// ネットワーク トラフィックとサーバ呼び出しを削減する
System.out.println("Inserting " + ts1.size() + " records.");
ts1.save();
// 処理が完了したので DataSet を閉じる ts1.close();
// 更新および削除用の KeyDef を定義する
// ROWID は Oracle 固有のフィールドで、更新および削除用の // 主キーとして機能することができる
KeyDef key = new KeyDef().addAttrib("ROWID");
// 最初に追加した 100 個のレコードを更新する TableDataSet ts2 =
new TableDataSet(conn, "empdemo", "ROWID, dept", key);
ts2.where("empid <= 100");
ts2.fetchRecords();
for (int i = 1; i <= ts2.size(); i++) { Record rec = ts2.getRecord(i);
rec.setValue("dept", i + rec.getValue("dept").asInt());
}
// 更新されたレコードを保存する
System.out.println("Update " + ts2.size() + " records.");
ts2.save();
// 同じ 100 個のレコードを削除する ts2.reset();
ts2.fetchRecords();
for (int i = 0; i < ts2.size(); i++) { Record rec = ts2.getRecord(i);
rec.markToBeDeleted();
}
// レコードをサーバから削除する
System.out.println("Delete " + ts2.size() + " records.");
ts2.save();
// DataSet、ResultSet、および Statement は、
// 操作が終わったら必ず閉じる必要がある ts2.close();
dbKona を使用した実装
// 最後に、必ず接続を閉じる conn.close();
} }
dbKona での JDBC PreparedStatement の使い方
dbKona では構文的に正しい SQL 文が作成されるため、ベンダ固有の SQL の記
述方法について知識がそれほど必要ないという点で便利です。しかし、dbKona で JDBC の PreparedStatementを使用できる場合もあります。
JDBC
PreparedStatementは、複数回使用される SQL 構文をあらかじめコンパ
イルする場合に使用されます。PreparedStatement
のパラメータは、
PreparedStatement.clearParameters()
を呼び出すことで消去できます。
PreparedStatment
オブジェクトは、JDBC
Connectionクラス(これまでのサ
ンプルで conn という名前で使用されていたオブジェクト)のpreparedStatement()
メソッドを使用して作成されます。次のサンプルでは、
PreparedStatement
を作成してそれをループの中で実行しています。この文に
は、従業員 ID、名前、および部署という 3 つの入力(IN)パラメータがありま す。このサンプルでは、100 人の従業員をテーブルに追加します。String inssql = "insert into empdemo(empid, " + "name, dept) values (?, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(inssql);
for (int i = 1; i <= 100; i++) { pstmt.setInt(1, i);
pstmt.setString(2, "Person" + i);
pstmt.setInt(3, i);
pstmt.executeUpdate();
}
pstmt.close();
作業が終了したら、Statement
オブジェクトまたは
PreparedStatementオブ
ジェクトを必ず閉じます。SQL を意識せずに同じタスクを dbKona で実行することもできます。この場合、
KeyDef
を使用して、更新または削除するフィールドを設定します。詳細につい
ては、チュートリアルの
7-35
ページの「KeyDef を使用した DBMS データの変 更」を参照してください。7 dbKona の使い方
dbKona でのストアド プロシージャの使い方
固有のタスク(システムまたはベンダに依存しないタスクである場合が多い)を 実行できる、リモート マシンに格納されたプロシージャや関数にアクセスして、