ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

オブジェクト指向で開発の最初から最後までの手順例-その29:雛形(2)

2007-09-05 18:20:12 | 開発ネタ

 オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」、今、「(4)フレームワークにもとづき、クラスなどの開発手順、雛形の確定」です。

 どんな雛形、仕様書を作らないといけないか、については、前回書きました。
 今回は、そのなかでも、DBの共通部分です。




■DB共通部分の機能

 DB共通部分では、トランザクション処理を行うために、
  1.コネクションを生成し
  2.コミットする
  3.ロールバックする
という機能を提供するのでした。。

1で生成した後、それを使って、各データベースアクセスプログラムが、トランザクション内の1処理(更新など)を行い、最後までうまくいけば2、エラーが起きたら、起きた時点で3を実行するのでした。

 ということで、1、2、3のメソッドを提供するクラスを考えます。




■クラスとその概要

 今回、そのクラスをMyConnectionとして、コンストラクタ、すなわち、MyConnection()で1、commit()で2、rollback()で3を行うとします。
 mySQLの場合とします。




■ソース

で、ソースは、こんなかんじ
import java.util.*;
import java.sql.*;

/*
 * 	トランザクション用のコネクション生成
 */
public class MyConnection {
	/*
	 * 	JDBC ドライバクラス名
	 */
	 public static final String MyDriverName = "org.gjt.mm.mysql.Driver";

	/*
	 * 	JDBC 接続URL(カスタマイズ必要)
	 */
	 public static final String MyURL = 
           "jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf8";

	/*
	 *  ユーザー名(カスタマイズ必要)
	 */
	 public static final String MyUserName = "admin";

	/*
	 *  パスワード(カスタマイズ必要)
	 */
	 public static final String MyPassword = "password";

	/*
	 * コネクション
	 */
	Connection con =	null;
	
	/*
	 * ステートメント
	 */
    	Statement stmt = null;

	/*
	 * エラー
	 */
    	Exception err = null;

	/*
	 * コネクションの生成
	 */
	public MyConnection()
	{

		try
		{
	      		// ドライバクラスをロード
      			Class.forName(MyDriverName);

 	     		// データベースへ接続
      			con = DriverManager.getConnection
                                     (MyURL,MyUserName,MyPassword);

			// 自動コミットモードを解除します
      			con.setAutoCommit(false);
      		
		 	// ステートメントオブジェクトを生成
		    	stmt = con.createStatement();

		}
		catch(Exception e)
		{
			err	=	e;
			return;
		}
	}

	/*
	 * コミット
	 */
	public	int	commit()
	{

		err	=	null;

		try
		{
			// バッチを実行します
			stmt.executeBatch();

			// コミットします
			con.commit();
//			System.out.println("commit");
    	          }
    	          catch (Exception e)
    	          {
    		          err	=	e;
		          try 
		          {
        		             // ロールバックします
        		             con.rollback();
//			    System.out.println("rollback1");
      		          }
      		          catch (SQLException ex)
      		          {
      			     err	=	ex;
      		          }
    	           }
    	           finally
    	           {
      		          // データベースへの接続をクローズします
      		          try
      		          {
        		              if (stmt!=null)
        		              {
          			stmt.close();
        		              }
        		              if (con!=null)
        		              {
          			con.close();
        		              }
      		           }
      		           catch (SQLException e)
      		           {
      			      err	=	e;
      		           }
    	            }

    	            if ( err	!=	null )
    		            return	 -1;

    	            return 0;
	}

	/*
	 * ロールバック
	 */
	public	int	rollback()
	{
		err	=	null;

		try 
		{
       		// ロールバックします
	       		con.rollback();
//			System.out.println("rollback2");
		}
      	         catch (SQLException ex)
      	         {
      		         err	=	ex;
      	         }
    	         finally
    	         {
      		         // データベースへの接続をクローズします
      		         try
      		         {
        		              if (stmt!=null)
        		              {
          			stmt.close();
        		              }
        		              if (con!=null)
        		              {
          			con.close();
        		              }
      		         }
      		         catch (SQLException e)
      		         {
      			      err	=	e;
      		         }
    	         }

    	         if ( err	!=	null )
    	         {
    		         err.printStackTrace();
    		         return	-1;
    	         }
    	         return	0;
	}
}

(上記< > ¥は、本当は半角)




■カスタマイズ必要なところ

 MyURL,MyUserName,MyPasswordは、それぞれの環境に合わせて、直してください。
(MyDriverNameは、MySQLなら同じだと思います)

 System.out.printlnのところは、デバック用でコメントしてありますけど、
 いらなかったら消していいところです。




ということで、データベースの共通部分は、これでおしまい。

この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 「Winny流出ファイルの保有IP... | トップ | 「ブログの画像からカメラ携... »
最新の画像もっと見る

開発ネタ」カテゴリの最新記事