robbie.dao
クラス BaseDao

java.lang.Object
  拡張robbie.dao.BaseDao
すべての実装インタフェース:
java.io.Serializable
直系の既知のサブクラス:
SDao, XDao

public class BaseDao
extends java.lang.Object
implements java.io.Serializable

DAOのベースクラス。

このクラスにはpublicメソッドは実装されていません。 このクラスは必ず継承をしてから、利用する必要があります。
拡張の方法は、このパッケージのSampleDAOおよび、XDAOの実装を確認して下さい。

関連項目:
XDao, SDao, 直列化された形式

コンストラクタの概要
BaseDao()
           
 
メソッドの概要
protected  void bindParameters(java.sql.PreparedStatement sts, java.util.List params)
          PreparedStatemanetへMapListのパラメータをバインドしています。
protected  void closeConnection()
          コネクションをクローズする。
protected  void closeQuery(java.sql.PreparedStatement sts, java.sql.ResultSet rs)
          検索処理を閉じます。
protected  void closeResultSet(java.sql.ResultSet rs)
          ResultSetインスタンスを閉じます。
protected  void closeStatement(java.sql.PreparedStatement sts)
          Statementインスタンスを閉じます。
protected  void commit()
          コミットする。
protected  java.util.List executeQuery(Query query)
          問い合わせを行い、結果をMapListで返します。
protected  java.lang.Object[][] executeQueryForArray(Query query)
          問い合わせを行い、結果をObject[][]で返します。
protected  java.util.List executeQueryForBeans(Query query, java.lang.Class beanClass)
          問い合わせを行い、結果をJavaBeansのListで返します。
protected  int executeUpdate(Query query)
          更新を行います。
protected  java.sql.Connection getConnection()
          Connectionオブジェクトを返す。
protected  boolean isClosed()
          コネクションが開いているかどうかをチェックします。
protected  java.sql.ResultSet openQuery(java.sql.PreparedStatement sts, java.util.List params)
          検索を実行し、ResultSetを返します。
protected  java.sql.PreparedStatement openStatement(java.lang.String sql)
          Statementインスタンスを返します。
protected  void rollback()
          ロールバックする。
protected  void setAutoCommit(boolean isAutoCommit)
          AutoCommitモードをセットします。
protected  void setConnection(java.sql.Connection conn)
          コネクションをセットする このクラスはコネクションの取得を行いません。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

BaseDao

public BaseDao()
メソッドの詳細

getConnection

protected java.sql.Connection getConnection()
Connectionオブジェクトを返す。

戻り値:
デフォルトではsetConnection()でセットされたConnection

setConnection

protected void setConnection(java.sql.Connection conn)
                      throws java.sql.SQLException
コネクションをセットする

このクラスはコネクションの取得を行いません。 サブクラスでコネクションを作成し、このメソッドを使ってセットしてください。

パラメータ:
conn - サブクラスで作成したConnection
例外:
java.sql.SQLException

closeConnection

protected void closeConnection()
                        throws java.sql.SQLException
コネクションをクローズする。

例外:
java.sql.SQLException

isClosed

protected boolean isClosed()
                    throws java.sql.SQLException
コネクションが開いているかどうかをチェックします。

JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。

戻り値:
Connectionがオープンしていたらtrue
例外:
java.sql.SQLException

setAutoCommit

protected void setAutoCommit(boolean isAutoCommit)
                      throws java.sql.SQLException
AutoCommitモードをセットします。

JDBCの仕様では、Connectionを取得した際には、デフォルトでAutoCommitモードが trueになります。したがって、複雑なトランザクション処理を行ない、 ロールバック、コミットを多用する場合には、あらかじめオートコミットを falseに設定しておく必要があります。

また、JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。

パラメータ:
isAutoCommit - 有効にする場合にはtrue
例外:
java.sql.SQLException

commit

protected void commit()
               throws java.sql.SQLException
コミットする。

JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。

例外:
java.sql.SQLException

rollback

protected void rollback()
                 throws java.sql.SQLException
ロールバックする。

JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。

例外:
java.sql.SQLException

executeQuery

protected java.util.List executeQuery(Query query)
                               throws java.sql.SQLException
問い合わせを行い、結果をMapListで返します。

ResultSetとStatementのCloseは行いますが、コネクションのCloseを行いません。

 使用例:
 このメソッドを使用する場合には、サブクラスで以下のように、
 コネクションの取得とclose()を管理しながら、実装する
 必要があります。
 
 try {
     // 何らかの実装を使用して、オープンされた
     // Connecionオブジェクトをセットします。
     setConnection(dataSource.getConnection());
     
     // Queryのオブジェクトを渡して問合せを実行
     List result = executeQuery(query):
     
     ...何らかの処理や別の問合せ
     
 } finally {
   // closeConnection()で必ずConnectionを閉じる。closeConnection()は
   // Connectionオブジェクトがnullであれば何もしない。
     closeConnection();
 }
 
 

パラメータ:
query - Queryオブジェクト
戻り値:
List MapのList
例外:
java.sql.SQLException
関連項目:
closeConnection()

executeQueryForArray

protected java.lang.Object[][] executeQueryForArray(Query query)
                                             throws java.sql.SQLException
問い合わせを行い、結果をObject[][]で返します。

Object[0][*]はカラム名のヘッダになります。 データだけ使用したい場合には、Object[1][*]から使用してください

パラメータ:
query - Queryオブジェクト
戻り値:
検索結果の2次元配列
例外:
java.sql.SQLException
関連項目:
executeQuery(Query)

executeQueryForBeans

protected java.util.List executeQueryForBeans(Query query,
                                              java.lang.Class beanClass)
                                       throws java.sql.SQLException
問い合わせを行い、結果をJavaBeansのListで返します。

パラメータ:
query - Queryオブジェクト
beanClass - TODO
戻り値:
検索結果のJavaBeansのList
例外:
java.sql.SQLException

executeUpdate

protected int executeUpdate(Query query)
                     throws java.sql.SQLException
更新を行います。

StatementのCloseは行いますが、コネクションのCloseは行いません。

 使用例:
 このメソッドを使用する場合には、サブクラスで以下のように、
 コネクションの取得とclose()を管理しながら、実装する
 必要があります。
 
 try {
     // 何らかの実装を使用して、オープンされた
     // Connecionオブジェクトをセットします。
     setConnection(dataSource.getConnection());
     
     // SQLのオブジェクトを渡して更新処理を実行
     int count = executeUpdate(query):
     
     // 例として、更新が行なわれていたらtrue、
     // 1行も更新されていなければfalseを返す
     if(count > 0) {
         return true;
     }
     return false;
     
 } finally {
     // closeConnection()で必ずConnectionを閉じる。closeConnection()は
     // Connectionオブジェクトがnullであれば何もしない。
     closeConnection();
 }
 
 
また、このクラスはStatementを閉じてしまうため、SQLは再利用できません。

バッチ処理のようにSQLを再利用するためには、サブクラスでopenStatement()や bindParameters()などのAPIを利用して再実装する必要があります。

パラメータ:
query - Queryクラス
戻り値:
更新件数
例外:
java.sql.SQLException
関連項目:
closeConnection()

openStatement

protected java.sql.PreparedStatement openStatement(java.lang.String sql)
                                            throws java.sql.SQLException
Statementインスタンスを返します。

利用方法はopenQuery()の使用例を確認してください。

パラメータ:
sql - SQLクラス
戻り値:
PreparedStatementオブジェクト
例外:
java.sql.SQLException
関連項目:
openQuery(PreparedStatement sts, List params)

openQuery

protected java.sql.ResultSet openQuery(java.sql.PreparedStatement sts,
                                       java.util.List params)
                                throws java.sql.SQLException
検索を実行し、ResultSetを返します。

executeQueryは、検索結果をMapListで返しますが、このメソッドでは、 既にopenされたStatementにバインド変数をセットして、ResultSetを 返します。

 使用例:
 このメソッドを使用する場合には、サブクラスで以下のように、
 PreparedStatement、ResultSet、Connectionの取得とclose()、
 およびSQLクラスを管理しながら、実装する必要があります。
 
 PreparedStatement statement = null;
 ResultSet reslut = null;
 try {
     // 何らかの実装を使用して、オープンされた
     // Connecionオブジェクトをセットします。
     setConnection(dataSource.getConnection());
     
     // QueryのオブジェクトからSQL文字列をバインド変数のMapListを
     // 取り出します。
     String sqlStr = query.getSQLString();
     List params = query.getBindParametersMapList();
     
     // StatementをOPENし、SQLを実行してResultSetを取得します。
     statement = openStatement(sqlStr);
     result = openQuery(statement, params);
     
     // ResutlSetを使用して何かの処理を行ないます。
     
     ・・・・・
     
 } finally {
     // 必ずPreparedStatement、ResultSet、Connectionを
     // 閉じます。
     try {
         closeQuery(statement, reslut);
     } finally {
         closeConnection();
     }
 }
 
 

パラメータ:
sts - オープンしたStatement
params - SQLラッパオブジェクト
戻り値:
実行結果ResultSet
例外:
java.sql.SQLException
関連項目:
openStatement(String sql), bindParameters(PreparedStatement sts, List params), closeQuery(PreparedStatement sts, ResultSet rs), closeConnection()

bindParameters

protected void bindParameters(java.sql.PreparedStatement sts,
                              java.util.List params)
                       throws java.sql.SQLException
PreparedStatemanetへMapListのパラメータをバインドしています。

このメソッドはopenQueryから呼出されています。

 openQueryの実装は、以下のようになっています。
 
      protected ResultSet openQuery(PreparedStatement sts, List params) 
              throws SQLException {
          
          bindParameters(sts, params);
          return sts.executeQuery();
      }
 
 上記のようにopenされたステートメントに新たにパラメータをセットして、
 SQLを実行しています。
 
 利用例:
 openQuery()の実装を参考に、実行するパラメータの配列を用意して
 以下のように処理を行なえば、バッチ的にデータベースを
 更新することが可能になります。
 
      for(int i=0; i<params.length; i++) {
          bindParameters(sts, params[i]);
          sts.executeUpdate();
      }
 
      *) paramsは、Listの配列とする
 
 

パラメータ:
sts - openされているPrepaedStatement
params - バインド変数のMapList
例外:
java.sql.SQLException
関連項目:
openQuery(PreparedStatement sts, List params)

closeQuery

protected void closeQuery(java.sql.PreparedStatement sts,
                          java.sql.ResultSet rs)
                   throws java.sql.SQLException
検索処理を閉じます。

実際にはResultSetとPreparedStatementをclose()しています。 利用方法はopenQuery()の使用例を確認してください。

パラメータ:
sts - openされているPrepaedStatement
rs - openされているResultSet
例外:
java.sql.SQLException
関連項目:
openQuery(PreparedStatement sts, List params)

closeStatement

protected void closeStatement(java.sql.PreparedStatement sts)
                       throws java.sql.SQLException
Statementインスタンスを閉じます。

パラメータ:
sts - openされているPrepaedStatemen
例外:
java.sql.SQLException

closeResultSet

protected void closeResultSet(java.sql.ResultSet rs)
                       throws java.sql.SQLException
ResultSetインスタンスを閉じます。

パラメータ:
rs - openされているResultSet
例外:
java.sql.SQLException