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

手動コミットモードを使用する

ドキュメント内 アプリケーション開発ガイド (JDBCドライバ編) (ページ 150-153)

第 5 章 アプリケーションのコンパイルおよび実行

A.9 手動コミットモードを使用する

手動コミットモードを使用して、トランザクションをコミットおよびロールバックするプログラム例について説明します。手動 コミットモードを使用することで、データベースへ更新結果を反映するタイミングを、アプリケーション内で制御することが できます。

このサンプルアプリケーションでは、IDが1の列に対して、NAMEの情報をwhaleに更新しています。更新処理終了 後、commitメソッドを使用して、データベースに更新処理を反映しています。

更新処理の反映後、更新結果確認のため、データを参照しています。

更新処理や参照処理の途中でエラーが発生した場合、rollbackメソッドを使用して、トランザクションをロールバックして います。

以下のサンプルアプリケーションでは、myhostというホストで起動しているJDBCネーミングサービスから、ds1というJDBC データソースの情報を取得しています。ホスト名やデータソース名については、アプリケーションの実行環境に合わせて 修正してください。

手動コミットモードを使用するプログラム例 // 以下のパッケージをインポートします。

import java.util.*;

import java.sql.*;

import javax.sql.*;

import javax.naming.*;

// クラスを定義します。

public class MyTransactionHandling {

public static void main(String args[]) {

DataSource ds = null;

Connection con = null;

Statement stmt1 = null;

Statement stmt2 = null;

ResultSet rs = null;

int iID = 0;

String sName = null;

try {

// JNDI環境を指定します。

Hashtable env = new Hashtable();

env.put(Context.INITIAL_CONTEXT_FACTORY,"com.fujitsu.symfoware.jdbc2.jndisp.SYMContextF actory");

env.put(Context.PROVIDER_URL,"SYM://myhost:10326");

InitialContext ctx = new InitialContext(env);

// JDBCデータソースを取得します。

ds = (DataSource)ctx.lookup("jdbc/ds1");

// データベースと接続します。

con = ds.getConnection();

// 手動コミットの設定 con.setAutoCommit(false);

// Statementのオブジェクトを生成します。

stmt1 = con.createStatement();

// IDが1の行に対して、UPDATE文を実行します。

// NAMEを'whale'に変更します。

stmt1.executeUpdate("UPDATE GENERAL.EMPLOYEE SET NAME= 'whale' WHERE ID=1");

// Statementのオブジェクトをクローズします。

stmt1.close();

// トランザクションをコミットし、更新を反映します。

con.commit();

// Statementのオブジェクトを生成します。

stmt2 = con.createStatement();

// SQL文を実行し、ResultSetの // オブジェクトを生成します。

rs = stmt2.executeQuery("SELECT ID,NAME FROM GENERAL.EMPLOYEE");

while(rs.next()) {

// ResultSetの列に対応する // データを取得します。

iID = rs.getInt(1);

sName = rs.getString(2);

// 取得した情報を表示します。

System.out.println("ID = " + iID);

System.out.println("NAME = " + sName);

}

// ResultSetのオブジェクトをクローズします。

rs.close();

// Statementのオブジェクトをクローズします。

stmt2.close();

// トランザクションをコミットします。

con.commit();

}

// SQLExceptionが発生した場合の処理を記述します。

catch (SQLException e) {

// エラー情報を出力します。

System.out.println("ERROR MESSAGE : " + e.getMessage());

System.out.println("SQLSTATE : " + e.getSQLState());

System.out.println("ERROR CODE : " + e.getErrorCode());

e.printStackTrace();

try {

if (con != null) {

// トランザクションをロールバックします。

con.rollback();

} }

// Exceptionが発生した場合の処理を記述します。

catch (Exception ex) {

// スタックトレースを出力します。

System.out.println("ERROR MESSAGE : " + e.getMessage());

e.printStackTrace();

} }

// その他のExceptionが発生した場合の処理を記述します。

catch (Exception e) {

// スタックトレースを出力します。

System.out.println("ERROR MESSAGE : " + e.getMessage());

e.printStackTrace();

try {

if (con != null) {

// トランザクションをロールバックします。

con.rollback();

} }

// Exceptionが発生した場合の処理を記述します。

catch (Exception ex) {

// スタックトレースを出力します。

System.out.println("ERROR MESSAGE : " + e.getMessage());

e.printStackTrace();

} }

finally { try {

if (con != null) {

// Connectionのオブジェクトをクローズします。

con.close();

}

}

// Exceptionが発生した場合の処理を記述します。

catch (Exception ex) {

// スタックトレースを出力します。

System.out.println("ERROR MESSAGE : " + ex.getMessage());

ex.printStackTrace();

} } } }

ドキュメント内 アプリケーション開発ガイド (JDBCドライバ編) (ページ 150-153)