|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
java.lang.Objectrobbie.dao.BaseDao
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 |
| コンストラクタの詳細 |
public BaseDao()
| メソッドの詳細 |
protected java.sql.Connection getConnection()
protected void setConnection(java.sql.Connection conn)
throws java.sql.SQLException
このクラスはコネクションの取得を行いません。 サブクラスでコネクションを作成し、このメソッドを使ってセットしてください。
conn - サブクラスで作成したConnection
java.sql.SQLException
protected void closeConnection()
throws java.sql.SQLException
java.sql.SQLException
protected boolean isClosed()
throws java.sql.SQLException
JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。
java.sql.SQLException
protected void setAutoCommit(boolean isAutoCommit)
throws java.sql.SQLException
JDBCの仕様では、Connectionを取得した際には、デフォルトでAutoCommitモードが trueになります。したがって、複雑なトランザクション処理を行ない、 ロールバック、コミットを多用する場合には、あらかじめオートコミットを falseに設定しておく必要があります。
また、JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。
isAutoCommit - 有効にする場合にはtrue
java.sql.SQLException
protected void commit()
throws java.sql.SQLException
JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。
java.sql.SQLException
protected void rollback()
throws java.sql.SQLException
JTAによってトランザクションを管理している場合には、 このメソッドを使用すると問題が発生する場合があります。
java.sql.SQLException
protected java.util.List executeQuery(Query query)
throws java.sql.SQLException
ResultSetとStatementのCloseは行いますが、コネクションのCloseを行いません。
使用例:
このメソッドを使用する場合には、サブクラスで以下のように、
コネクションの取得とclose()を管理しながら、実装する
必要があります。
try {
// 何らかの実装を使用して、オープンされた
// Connecionオブジェクトをセットします。
setConnection(dataSource.getConnection());
// Queryのオブジェクトを渡して問合せを実行
List result = executeQuery(query):
...何らかの処理や別の問合せ
} finally {
// closeConnection()で必ずConnectionを閉じる。closeConnection()は
// Connectionオブジェクトがnullであれば何もしない。
closeConnection();
}
query - Queryオブジェクト
java.sql.SQLExceptioncloseConnection()
protected java.lang.Object[][] executeQueryForArray(Query query)
throws java.sql.SQLException
Object[0][*]はカラム名のヘッダになります。 データだけ使用したい場合には、Object[1][*]から使用してください
query - Queryオブジェクト
java.sql.SQLExceptionexecuteQuery(Query)
protected java.util.List executeQueryForBeans(Query query,
java.lang.Class beanClass)
throws java.sql.SQLException
query - QueryオブジェクトbeanClass - TODO
java.sql.SQLException
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.SQLExceptioncloseConnection()
protected java.sql.PreparedStatement openStatement(java.lang.String sql)
throws java.sql.SQLException
利用方法はopenQuery()の使用例を確認してください。
sql - SQLクラス
java.sql.SQLExceptionopenQuery(PreparedStatement sts, List params)
protected java.sql.ResultSet openQuery(java.sql.PreparedStatement sts,
java.util.List params)
throws java.sql.SQLException
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 - オープンしたStatementparams - SQLラッパオブジェクト
java.sql.SQLExceptionopenStatement(String sql),
bindParameters(PreparedStatement sts, List params),
closeQuery(PreparedStatement sts, ResultSet rs),
closeConnection()
protected void bindParameters(java.sql.PreparedStatement sts,
java.util.List params)
throws java.sql.SQLException
このメソッドは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されているPrepaedStatementparams - バインド変数のMapList
java.sql.SQLExceptionopenQuery(PreparedStatement sts, List params)
protected void closeQuery(java.sql.PreparedStatement sts,
java.sql.ResultSet rs)
throws java.sql.SQLException
実際にはResultSetとPreparedStatementをclose()しています。 利用方法はopenQuery()の使用例を確認してください。
sts - openされているPrepaedStatementrs - openされているResultSet
java.sql.SQLExceptionopenQuery(PreparedStatement sts, List params)
protected void closeStatement(java.sql.PreparedStatement sts)
throws java.sql.SQLException
sts - openされているPrepaedStatemen
java.sql.SQLException
protected void closeResultSet(java.sql.ResultSet rs)
throws java.sql.SQLException
rs - openされているResultSet
java.sql.SQLException
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||