001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.db; 017 018import java.sql.Connection; 019import java.sql.ResultSet; 020import java.sql.SQLException; 021 022import org.opengion.fukurou.db.Transaction; 023import org.opengion.fukurou.db.ConnectionFactory; // 5.3.8.0 (2011/08/01) 024import org.opengion.fukurou.util.ErrorMessage; 025import org.opengion.hayabusa.common.HybsSystem; 026import org.opengion.hayabusa.common.HybsSystemException; 027import org.opengion.hayabusa.resource.ResourceManager; 028 029/** 030 * Query インターフェースを継承した Query の実装クラスです。 031 * クエリークラスにステートメントを与えて execute()することにより内部に DBTableModel を 032 * 作成します。 033 * このクラスは、Abstract クラスのため、実装は個々のサブクラスで行います。 034 * 唯一実装する必要があるのは, execute() メソッドだけです。 035 * 036 * @og.group DB検索 037 * @og.group DB登録 038 * 039 * @version 4.0 040 * @author Kazuhiko Hasegawa 041 * @since JDK5.0, 042 */ 043public class AbstractQuery implements Query { 044 private Connection connection = null ; 045 private Transaction transaction = null ; // 5.1.9.0 (2010/08/01) 046 private int rtnCode = ErrorMessage.OK; 047 private ErrorMessage errMessage = null; 048 private ResourceManager resource = null; 049// private ApplicationInfo appInfo = null; // 5.1.9.0 (2010/08/01) ローカル化 050 051 private DBTableModel table = null; 052 private String connID = null; 053 private String stmtString = null; 054 private int executeCount = -1 ; 055 private int skipRowCount = 0 ; 056 private int maxRowCount = HybsSystem.sysInt( "DB_MAX_ROW_COUNT" ) ; 057 private boolean updateFlag = true ; 058 private DBEditConfig config = null; // 5.3.6.0 (2011/06/01) 059 060 // 5.1.9.0 (2010/08/01) DB_RETRY_COUNT,DB_RETRY_TIME 廃止 061// private static final int DB_RETRY_COUNT = HybsSystem.sysInt( "DB_RETRY_COUNT" ) ; 062// private static final int DB_RETRY_TIME = HybsSystem.sysInt( "DB_RETRY_TIME" ) ; 063 protected static final int DB_MAX_QUERY_TIMEOUT = HybsSystem.sysInt( "DB_MAX_QUERY_TIMEOUT" ) ; 064 065 // 3.5.2.0 (2003/10/20) 内部オブジェクトタイプ名を システムパラメータ で定義します。 066 /** 内部オブジェクトタイプ名 {@value} */ 067 public static final String ARG_ARRAY = "ARG_ARRAY" ; 068 /** 内部オブジェクトタイプ名 {@value} */ 069 public static final String SYSARG_ARRAY = "SYSARG_ARRAY" ; 070 /** 内部オブジェクトタイプ名 {@value} */ 071 public static final String ERR_MSG = "ERR_MSG" ; 072 /** 内部オブジェクトタイプ名 {@value} */ 073 public static final String ERR_MSG_ARRAY = "ERR_MSG_ARRAY" ; 074 075 /** 076 * Queryオブジェクトを初期化します。 077 * これは、QueryFactory のプールから取り出すときに(または戻すとき)に 078 * 初期化するのに使用します。 079 * 080 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 081 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 082 * @og.rev 5.1.9.0 (2010/08/01) transaction 属性(外部Transactionの使用)追加 083 * @og.rev 5.3.6.0 (2011/06/01) DBEditConfig 追加 084 * 085 */ 086 public void init() { 087 close(); // 先にクローズ処理を行います。(transaction = null がセット) 088 rtnCode = ErrorMessage.OK; 089 errMessage = null; 090 resource = null; 091// appInfo = null; // 5.1.9.0 (2010/08/01) ローカル化 092 table = null; 093 connID = null; 094 stmtString = null; 095 executeCount = -1 ; 096 skipRowCount = 0 ; 097 maxRowCount = HybsSystem.sysInt( "DB_MAX_ROW_COUNT" ) ; 098 updateFlag = true ; 099 connection = null; // 5.1.9.0 (2010/08/01) キャッシュの初期化 100 config = null; // 5.3.6.0 (2011/06/01) DBEditConfig追加 101 } 102 103 /** 104 * ステートメント文字列をセットします。 105 * 106 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 107 * 108 * @param stmt ステートメント文字列 109 * 110 */ 111 public void setStatement( final String stmt ) { 112 this.stmtString = stmt.trim(); 113 } 114 115 /** 116 * ステートメント文字列を取り出します。 117 * 118 * @return ステートメント文字列 119 * 120 */ 121 public String getStatement() { 122 return stmtString; 123 } 124 125 /** 126 * クエリーを実行します。 127 * 実行方法等は各サブクラスの実装に依存します。 128 * セットされているステートメント文字列とそのタイプが合っていない場合は, 129 * エラーになります。 130 * 実行結果は、DBTableModel にセットされます。 131 * 実行結果の件数は #getExecuteCount() で取得できます。 132 * ※ このクラスでは実装されていません。 133 * 134 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 135 * 136 */ 137 public void execute() { 138 String errMsg = "このクラスでは実装されていません。execute()"; 139 throw new UnsupportedOperationException( errMsg ); 140 } 141 142 /** 143 * 引数配列付のクエリーを実行します。 144 * 処理自体は, #execute() と同様に、各サブクラスの実装に依存します。 145 * これは、PreparedQuery で使用する引数を配列でセットするものです。 146 * select * from emp where deptno = ? and job = ? などの PreparedQuery や 147 * { call xxxx( ?,?,? ) } などの CallableStatement の ? 部分の引数を 148 * 順番にセットしていきます。 149 * ※ このクラスでは実装されていません。 150 * 151 * @param args オブジェクトの引数配列 152 */ 153 public void execute( final String[] args ) { 154 String errMsg = "このクラスでは実装されていません。execute( String[] )"; 155 throw new UnsupportedOperationException( errMsg ); 156 } 157 158 /** 159 * 引数配列付のクエリーを実行します。 160 * 処理自体は, #execute() と同様に、各サブクラスの実装に依存します。 161 * これは、PreparedQuery で使用する引数を配列でセットするものです。 162 * select * from emp where deptno = ? and job = ? などの PreparedQuery の 163 * ? 部分の引数を 164 * 順番にセットしていきます。 165 * ※ このクラスでは実装されていません。 166 * 167 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 168 * 169 * @param keys オブジェクトのキー配列 170 * @param args オブジェクトの引数配列 171 */ 172 public void execute( final String[] keys, final String[] args ) { 173 String errMsg = "このクラスでは実装されていません。execute( String[],String[] )"; 174 throw new UnsupportedOperationException( errMsg ); 175 } 176 177 /** 178 * 引数配列付のクエリーを実行します。 179 * 処理自体は, #execute() と同様に、各サブクラスの実装に依存します。 180 * これは、PreparedQuery で使用する引数を配列でセットするものです。 181 * select * from emp where deptno = ? and job = ? などの PreparedQuery の 182 * ? 部分の引数を 183 * 順番にセットしていきます。 184 * ※ このクラスでは実装されていません。 185 * 186 * @og.rev 4.0.0.0 (2005/01/31) 引数をすべて受け取って実行するメソッドを標準メソッドとして追加 187 * 188 * @param names カラム名(CSV形式) 189 * @param dbArrayType アレイタイプ名称 190 * @param sysArg DBSysArg配列 191 * @param userArg DBUserArg配列 192 */ 193 public void execute( final String names,final String dbArrayType, 194 final DBSysArg[] sysArg,final DBUserArg[] userArg ) { 195 String errMsg = "このクラスでは実装されていません。execute( String,String,DBSysArg[],DBUserArg[] )"; 196 throw new UnsupportedOperationException( errMsg ); 197 } 198 199 /** 200 * 引数配列付のクエリーを実行します。 201 * 処理自体は, #execute() と同様に、各サブクラスの実装に依存します。 202 * これは、PreparedQuery で使用する引数を配列でセットするものです。 203 * select * from emp where deptno = ? and job = ? などの PreparedQuery の 204 * [カラム名] 部分の引数を、DBTableModelから順番にセットしていきます。 205 * ※ このクラスでは実装されていません。 206 * 207 * @param rowNo 選択された行番号配列(登録する対象行) 208 * @param table DBTableModelオブジェクト(登録する元データ) 209 */ 210 public void execute( final int[] rowNo, final DBTableModel table ) { 211 String errMsg = "このクラスでは実装されていません。execute( final int[] rowNo, final DBTableModel table )"; 212 throw new UnsupportedOperationException( errMsg ); 213 } 214 215 /** 216 * コミットを行います。 217 * 218 * 外部からコネクションが与えられた場合は、何も行いません。 219 * 220 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 221 * @og.rev 3.8.0.8 (2005/10/03) エラーメッセージの出力順をメッセージ+Queryに変更します。 222 * @og.rev 5.1.9.0 (2010/08/01) transaction 属性追加。 223 * 224 */ 225 public void commit() { 226 if( transaction == null ) { return; } 227 228 if( !transaction.commit() ) { 229 transaction.rollback(); 230 realClose(); 231 String errMsg = "コミットすることが出来ませんでした。" + HybsSystem.CR 232 + getStatement() + HybsSystem.CR ; 233 throw new HybsSystemException( errMsg ); 234 } 235 236// if( connection == null ) { return; } 237// try { 238// connection.commit(); 239// } 240// catch( SQLException ex ) { 241// transaction.rollback(); // 5.1.9.0 (2010/08/01) 242// realClose(); 243// String errMsg = "コミットすることが出来ませんでした。" + HybsSystem.CR 244// + ex.getMessage() + ":" + ex.getSQLState() 245// + HybsSystem.CR + getStatement() + HybsSystem.CR ; 246// throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 247// } 248 } 249 250 /** 251 * ロールバックを行います。 252 * 253 * 外部からコネクションが与えられた場合は、何も行いません。 254 * 255 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 256 * @og.rev 3.8.0.8 (2005/10/03) エラーメッセージの出力順をメッセージ+Queryに変更します。 257 * @og.rev 5.1.9.0 (2010/08/01) transaction 属性追加。 258 * 259 */ 260 public void rollback() { 261 if( transaction == null ) { return; } 262 263 if( !transaction.rollback() ) { 264 realClose(); 265 String errMsg = "ロールバックすることが出来ません。" + HybsSystem.CR 266 + getStatement() + HybsSystem.CR ; 267 throw new HybsSystemException( errMsg ); 268 } 269 270// if( connection == null ) { return; } 271// try { 272// connection.rollback(); 273// } 274// catch( SQLException ex ) { 275// if( transaction != null ) { transaction.rollback(); } // 5.1.9.0 (2010/08/01) 276// realClose(); 277// String errMsg = "ロールバックすることが出来ません。" + HybsSystem.CR 278// + ex.getMessage() + ":" + ex.getSQLState() 279// + HybsSystem.CR + getStatement() + HybsSystem.CR ; 280// throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 281// } 282 } 283 284 /** 285 * 使用した Statementオブジェクトをクロースし、Connection オブジェクトを 286 * プールに返します。 287 * 主に、正常終了した場合のクローズ処理になります。 288 * 289 * 外部からコネクションが与えられた場合は、何も行いません。 290 * 291 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 292 * @og.rev 3.6.0.4 (2004/10/14) SQLWarning の取得(getWarning)をコメントアウトします。 293 * @og.rev 5.1.9.0 (2010/08/01) transaction 属性追加。 294 * @og.rev 5.3.8.0 (2011/08/01) Transaction発生箇所でclose()するため、ここではclose() しない。 295 * 296 */ 297 public void close() { 298// if( transaction != null ) { 299// transaction.close(); // 正常な場合のクローズ 300// transaction = null; 301// } 302 303// if( connection != null ) { 304// try { 305// // 4.0.0 (2005/01/31) 306// if( rtnCode > ErrorMessage.NG ) { 307// realClose(); 308// } 309// } 310// finally { 311// ConnectionFactory.close( connection,connID ); // 4.0.0 (2005/01/31) 312// connection = null; 313// } 314// } 315 } 316 317 /** 318 * Connection オブジェクトを実際にクローズ(破棄)します。 319 * プールからも削除します。 320 * 実行時エラー等が発生したときに、このメソッドを呼び出します。 321 * 322 * 外部からコネクションが与えられた場合は、何も行いません。 323 * 324 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 325 * @og.rev 5.1.9.0 (2010/08/01) transaction 属性追加。 326 * @og.rev 5.3.8.0 (2011/08/01) Transaction発生箇所でclose()するため、ここではclose() しない。 327 * 328 */ 329 public void realClose() { 330// if( transaction != null ) { 331// transaction.close( true ); // エラーが発生した場合のクローズ 332// transaction = null; 333// } 334 335// if( connection != null ) { 336// ConnectionFactory.remove( connection,connID ); 337// connection = null; 338// } 339 } 340 341 /** 342 * クエリーの実行結果件数をセットします。 343 * 初期値は -1 です。(クエリーが失敗した場合や,CallableStatement の呼び出し等で 344 * 実行件数が明確でない場合の戻り値)。 345 * 346 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 347 * 348 * @param executeCount 実行結果件数 349 */ 350 protected void setExecuteCount( final int executeCount ) { 351 this.executeCount = executeCount; 352 } 353 354 /** 355 * クエリーの実行結果を返します。 356 * クエリーが失敗した場合や,CallableStatement の呼び出し等で実行件数が明確でない 357 * 場合は, -1 が返されます。 358 * 359 * @return 実行結果件数 360 */ 361 public int getExecuteCount() { 362 return executeCount; 363 } 364 365 /** 366 * DBTableModel をセットします。 367 * なお、検索系実行前に setDBTableModel() でテーブルをセットしていたとしても 368 * そのオブジェクトは破棄されて、新しい DBTableModel が生成されます。 369 * 370 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 371 * 372 * @param table DBTableModelオブジェクト 373 */ 374 protected void setDBTableModel( final DBTableModel table ) { 375 this.table = table; 376 } 377 378 /** 379 * 実行結果の DBTableModel を返します。 380 * 381 * @return DBTableModelオブジェクト 382 */ 383 public DBTableModel getDBTableModel() { 384 return table; 385 } 386 387 /** 388 * データベースの最大検索件数を返します。 389 * (初期値:DB_MAX_ROW_COUNT[={@og.value org.opengion.hayabusa.common.SystemData#DB_MAX_ROW_COUNT}])。 390 * データベース自体の検索は,指定されたSQLの全件を検索しますが, 391 * DBTableModelのデータとして登録する最大件数をこの値に設定します。0は無制限です。 392 * サーバーのメモリ資源と応答時間の確保の為です。 393 * 394 * @return 最大検索件数 395 */ 396 public int getMaxRowCount() { 397 return maxRowCount; 398 } 399 400 /** 401 * データベースの最大検索件数をセットします。 402 * データベース自体の検索は,指定されたSQLの全件を検索しますが, 403 * DBTableModelのデータとして登録する最大件数をこの値に設定します。 404 * サーバーのメモリ資源と応答時間の確保の為です。 405 * ゼロ、または、負の値を設定すると、無制限(Integer.MAX_VALUE)になります。 406 * 407 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 408 * @og.rev 4.0.0.0 (2005/08/31) ゼロ、または、負の値は、無制限(Integer.MAX_VALUE)にする。 409 * 410 * @param maxRowCount 最大検索件数 411 */ 412 public void setMaxRowCount( final int maxRowCount ) { 413 this.maxRowCount = ( maxRowCount > 0 ) ? maxRowCount : Integer.MAX_VALUE ; 414 } 415 416 /** 417 * データベースの検索スキップ件数を返します。 418 * データベース自体の検索は,指定されたSQLの全件を検索しますが, 419 * DBTableModelのデータとしては、スキップ件数分は登録されません。 420 * サーバーのメモリ資源と応答時間の確保の為です。 421 * 422 * @return 最大検索件数 423 */ 424 public int getSkipRowCount() { 425 return skipRowCount; 426 } 427 428 /** 429 * データベースの検索スキップ件数をセットします。 430 * データベース自体の検索は,指定されたSQLの全件を検索しますが, 431 * DBTableModelのデータとしては、スキップ件数分は登録されません。 432 * サーバーのメモリ資源と応答時間の確保の為です。 433 * 434 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 435 * 436 * @param skipRowCount スキップ件数 437 */ 438 public void setSkipRowCount( final int skipRowCount ) { 439 this.skipRowCount = skipRowCount; 440 } 441 442 /** 443 * データベースの接続先IDをセットします。 444 * システムパラメータ ファイルに定義してある データベース識別IDによって、 445 * 接続先を切り替えます。 446 * この接続先IDを元に,Connection オブジェクトを作成します。 447 * 448 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 449 * @og.rev 5.1.9.0 (2010/08/01) 廃止 450 * 451 * @param connID 接続先ID 452 */ 453// public void setConnectionID( final String connID ) { 454// close(); 455// this.connID = connID; 456// } 457 458 /** 459 * アップデートフラグをセットします。 460 * これは、Query で更新処理の SQL 文を実行したときにセットされます。 461 * 更新処理が実行:true / 検索処理のみ:false をセットします。 462 * このメソッドを呼び出さない場合は、デフォルト:true です。 463 * 464 * @og.rev 2.1.2.3 (2002/12/02) データベース更新時に、更新フラグをセットするように変更 465 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 466 * 467 * @param up アップデートされたかどうか[true:更新処理/false:検索処理] 468 */ 469 protected void setUpdateFlag( final boolean up ) { 470 updateFlag = up; 471 } 472 473 /** 474 * アップデートフラグを取得します。 475 * これは、Query で更新処理の SQL 文を実行したときに true にセットされます。 476 * 更新処理が実行:true / 検索処理のみ:false を取得できます。 477 * 478 * @og.rev 2.1.2.3 (2002/12/02) データベース更新時に、更新フラグをセットするように変更 479 * @og.rev 4.0.0.0 (2007/07/20) メソッド名変更( getUpdateFlag() ⇒ isUpdate() ) 480 * 481 * @return アップデートされたかどうか[true:更新処理/false:検索処理] 482 */ 483 public boolean isUpdate() { 484 return updateFlag ; 485 } 486 487 /** 488 * リソースマネージャーをセットします。 489 * これは、言語(ロケール)に応じた DBColumn をあらかじめ設定しておく為に 490 * 必要です。 491 * リソースマネージャーが設定されていない、または、所定のキーの DBColumn が 492 * リソースに存在しない場合は、内部で DBColumn オブジェクトを作成します。 493 * 494 * @og.rev 4.0.0.0 (2005/01/31) lang ⇒ ResourceManager へ変更 495 * 496 * @param resource リソースマネージャー 497 */ 498 public void setResourceManager( final ResourceManager resource ) { 499 this.resource = resource; 500 } 501 502 /** 503 * アクセスログ取得の為,ApplicationInfoオブジェクトを設定します。 504 * 505 * @og.rev 3.8.7.0 (2006/12/15) 新規追加 506 * @og.rev 5.1.9.0 (2010/08/01) 廃止 507 * 508 * @param appInfo ApplicationInfo 509 */ 510// public void setApplicationInfo( final ApplicationInfo appInfo ) { 511// this.appInfo = appInfo; 512// } 513 514 /** 515 * 内部のリソースを元に言語コード を返します。 516 * 内部にリソースが登録されていない場合は, null を返します。 517 * 518 * @og.rev 5.3.6.0 (2011/06/01) 廃止 519 * 520 * @return 言語コード 521 */ 522// public String getLang() { 523// String lang = null; 524// if( resource != null ) { lang = resource.getLang(); } 525// return lang; 526// } 527 528 /** 529 * エラーコード を取得します。 530 * エラーコード は、ErrorMessage クラスで規定されているコードです。 531 * 532 * @return エラーコード 533 */ 534 public int getErrorCode() { return rtnCode; } 535 536 /** 537 * エラーコード をセットします。 538 * エラーコード は、ErrorMessage クラスで規定されているコードです。 539 * 540 * @param cd エラーコード 541 */ 542 protected void setErrorCode( final int cd ) { rtnCode = cd; } 543 544 /** 545 * エラーメッセージオブジェクト を取得します。 546 * 547 * @return エラーメッセージオブジェクト 548 */ 549 public ErrorMessage getErrorMessage() { return errMessage; } 550 551 /** 552 * エラーメッセージオブジェクト をセットします。 553 * 554 * @param em エラーメッセージオブジェクト 555 */ 556 protected void setErrorMessage( final ErrorMessage em ) { errMessage = em; } 557 558 /** 559 * エディット設定オブジェクトをセットします。 560 * 561 * @og.rev 5.3.6.0 (2011/06/01) 新規追加 562 * 563 * @param config エディット設定オブジェクト 564 */ 565 public void setEditConfig( final DBEditConfig config ) { 566 this.config = config; 567 } 568 569 /** 570 * エディット設定オブジェクトを取得します。 571 * 572 * @og.rev 5.3.6.0 (2011/06/01) 新規追加 573 * 574 * @return エディット設定オブジェクト 575 */ 576 protected DBEditConfig getEditConfig() { 577 return config; 578 } 579 580 ////////////////////////////////////////////////////////////////////////// 581 // 582 // 継承時にサブクラスから使用するメソッド類( protected ) 583 // 584 ////////////////////////////////////////////////////////////////////////// 585 586 /** 587 * ResultSet を DBTableModelに割り当てます。 588 * 589 * 毎回,検索毎に,DBTableModel にコピーするイメージです。 590 * ResulSet 以外のオブジェクトから,DBTableModelを作成する場合は, 591 * このメソッドをオーバーライドします。 592 * 593 * このメソッドは, execute からのみ,呼び出されます。 594 * それ以外からは呼出し出来ません。 595 * 596 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 597 * @og.rev 3.3.3.3 (2003/08/06) カラムのラベル名を、大文字に変換する。 598 * @og.rev 3.8.5.0 (2006/03/02) CLOB カラムかどうかを判定しCLOBの場合は、Clob オブジェクトから文字列を取り出します。 599 * @og.rev 3.8.8.8 (2007/05/11) ROWID対応(小数点対応 "0.3" が ".3" と表示される対策) 600 * @og.rev 4.0.0.0 (2006/01/31) CLOB カラムかどうかを判定しCLOBの場合は、ストリームから値を取り出します。 601 * @og.rev 5.3.6.0 (2011/06/01) DBTableModel作成処理をDBTableModelUtilに移動&集計機能対応 602 * 603 * @param resultSet ResultSetオブジェクト 604 */ 605 protected void createTableModel( final ResultSet resultSet ) { 606 try { 607 if( config == null ) { 608 table = DBTableModelUtil.makeDBTable( resultSet, getSkipRowCount(), maxRowCount, resource ); 609 } 610 else { 611 table = DBTableModelUtil.makeEditDBTable( resultSet, getSkipRowCount(), maxRowCount, resource, config ); 612 } 613 614 setExecuteCount( table.getRowCount() ); 615 } 616 catch( SQLException ex ) { 617 realClose(); 618 String errMsg = "テーブルモデルを作成できませんでした。"; 619 throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 620 } 621 } 622 623 /** 624 * ConnectionFactory.connection( String ); を利用して,Connection 625 * オブジェクトを取り出します。 626 * 627 * コネクションプールが一杯の場合は、即エラーになります。 628 * 629 * @og.rev 3.1.1.0 (2003/03/28) 同期メソッド(synchronized付き)を非同期に変更する。 630 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得の為,ApplicationInfoオブジェクトを設定 631 * @og.rev 5.1.9.0 (2010/08/01) transaction 属性追加。 632 * 633 * @return コネクション 634 */ 635 protected Connection getConnection() { 636// if( connection != null ) { return connection; } 637 638 if( connection == null ) { 639 // 5.1.9.0 (2010/08/01) transaction 属性追加。 640 if( transaction == null ) { 641 String errMsg = "Transaction をセットする前に、コネクションを取り出す要求がなされました。" 642 + HybsSystem.CR 643 + "connID = [" + connID + "]" ; 644 throw new HybsSystemException( errMsg ); 645 } 646 else { 647 connection = transaction.getConnection( connID ); 648 } 649 } 650 651 return connection; 652 653// MissingResourceException exTemp = null; 654// for( int i=0; i<DB_RETRY_COUNT; i++ ) { 655// try { 656// connection = ConnectionFactory.connection( connID,appInfo ); 657// return connection; 658// } 659// catch( MissingResourceException ex ) { 660// try { 661// exTemp = ex; 662// Thread.sleep( DB_RETRY_TIME ); 663// } 664// catch ( InterruptedException ex2) { 665// LogWriter.log( "InterruptedException:" + ex2.getMessage() ); 666// } 667// } 668// } 669// String errMsg = "コネクションを取り出すことが出来ませんでした。 " 670// + HybsSystem.CR 671// + "connID = [" + connID + "]" ; 672// throw new HybsSystemException( errMsg,exTemp ); 673 } 674 675 /** 676 * Transactionオブジェクトを外部から設定します。 677 * 678 * 通常は、ConnectionFactory を使用して、内部で Connection を作成しますが、 679 * 一連のトランザクション処理を実施するには、外部から Transactionオブジェクトを 680 * を与えて、そこから、Connection を取り出す必要があります。 681 * 682 * ここでは、内部の connection が存在しない場合に限り、セットを許可します。 683 * 684 * @og.rev 5.1.9.0 (2010/08/01) 新規追加 685 * 686 * @param connID 接続先ID 687 * @param tran Transactionオブジェクト 688 */ 689 public void setTransaction( final String connID , final Transaction tran ) { 690 if( transaction == null ) { 691 transaction = tran; 692 this.connID = connID; 693 } 694 else { 695 String errMsg = "トランザクションは、すでに設定済みです。" 696 + HybsSystem.CR 697 + "connID = [" + connID + "]" ; 698 throw new HybsSystemException( errMsg ); 699 } 700 } 701 702 /** 703 * connection オブジェクトから,ワーニングデータを取り出します。 704 * 705 * ワーニングデータは,SQLWarning クラスのオブジェクトに複数件貯えられます。 706 * query 実行後に,確認しておく必要があります。 707 * 708 * このメソッドは, execute からのみ,呼び出されます。 709 * それ以外からは呼出し出来ません。 710 * 711 * @param connection Connection 712 * 713 * @return ワーニング ErrorMessage 714 */ 715 // protected ErrorMessage getWarning( final Connection connection ) { 716 // if( connection == null ) { return null; } 717 // 718 // try { 719 // ErrorMessage em = new ErrorMessage(); 720 // for( SQLWarning warning = connection.getWarnings(); 721 // warning != null ; 722 // warning = warning.getNextWarning() ) { 723 // em.addMessage( 0,ErrorMessage.WARNING,warning.getMessage(),warning.getSQLState() ); 724 // } 725 // return em; 726 // } 727 // catch (SQLException ex) { 728 // realClose(); 729 // String errMsg = "ワーニングを取り出すことが出来ませんでした。"; 730 // errMsg += System.getProperty( "line.separator" ); 731 // errMsg += ex.getMessage() + ":" + ex.getSQLState(); 732 // throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 733 // } 734 // } 735 736 /** 737 * この接続が、PreparedStatement#getParameterMetaData() を使用するかどうかを判定します。 738 * 739 * ConnectionFactory#useParameterMetaData(String) の結果を返します。(postgreSQL対応) 740 * 741 * @og.rev 5.3.8.0 (2011/08/01) 新規追加 742 * 743 * @return 使用する場合:true / その他:false 744 * @see org.opengion.fukurou.db.ConnectionFactory#useParameterMetaData(String) 745 */ 746 protected boolean useParameterMetaData() { 747 return ConnectionFactory.useParameterMetaData( connID ); 748 } 749 750 ////////////////////////////////////////////////////////////////////////// 751 // 752 // Object クラスのオーバーライド部分 753 // 754 ////////////////////////////////////////////////////////////////////////// 755 756 /** 757 * オブジェクトの識別子として,最後のクエリーを返します。 758 * 759 * @return 最後のクエリー 760 */ 761 @Override 762 public String toString() { 763 return "LastQuery :[" + getStatement() + "] "; 764 } 765}