1

CallableStatementオブジェクトを拡張するサブクラスを作成したいと思います。これを実行して、executeメソッドとexecuteQueryメソッドをオーバーライドして、各SP呼び出しでいくつかのメトリックを追跡できるようにします。

現在、次のようなコードがあります。

Connection db = poolingDataSource.getConnection();
CallableStatement cstmt = db.prepareCall("{call pSampleStoredProc()}");
ResultSet rs = cstmt.executeQuery();

ここで、poolingDataSourceはapachecommonsdbcpパッケージからのものです。私の実装は、JDBCを使用してMySQLデータベースに接続されています。

現在、prepareCallメソッドはcom.mysql.jdbc.JDBC4CallableStatementを返します。これを変更して、JDBC4CallableStatementを拡張するが、execute()メソッドとexecuteQuery()メソッドをオーバーライドする独自のクラスを返すようにしたいと思います。

これを行うための最良の方法について何かアイデアはありますか?

4

1 に答える 1

5

これを行う必要のある場所が管理しやすい場合は、簡単な方法(データベースドライバーにカスタムのCallableStatementオブジェクトを返させるよりも簡単)を作成して、ラッパーまたはデコレーターをラップオーバーすることをお勧めします。 dbから取得するCallableStatementオブジェクト。基本的に、CallableStatementのすべてのメソッドを実装し、CallableStatementオブジェクトをそのコンストラクターへのパラメーターとして受け取り、execute()とexecuteQuery()の場合を除いて、すべてのメソッド呼び出しを他のオブジェクトに委任するクラスを作成します。他のオブジェクトのexecute()メソッドに委任する前後に、ロギングメソッドを呼び出します。

確かにこれを行うには他の方法がありますが、これは私を簡単に思いました。

Connection db = poolingDataSource.getConnection();
CallableStatement cstmt = db.prepareCall("{call pSampleStoredProc()}");
MyCallableStatement mystmt = new MyCallableStatement( cstmt );
ResultSet rs = mystmt.executeQuery();
于 2010-09-01T19:26:37.187 に答える