Symfoware Server アプリケーション開発ガイド(JDBCドライバ編) - FUJITSU - |
目次 索引 |
付録A Java言語のサンプルプログラム |
手動コミットモードを使用して、トランザクションをコミットおよびロールバックするプログラム例について説明します。手動コミットモードを使用することで、データベースへ更新結果を反映するタイミングを、アプリケーション内で制御することができます。
このサンプルアプリケーションでは、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.SYMContextFactory"); 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(); } } } } |
目次 索引 |