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 */
016 package org.opengion.hayabusa.report;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.common.HybsSystemException;
020 import org.opengion.fukurou.db.ConnectionFactory;
021 import org.opengion.fukurou.db.DBUtil; // 5.5.5.1 (2012/08/07)
022 import org.opengion.fukurou.util.StringUtil;
023 import org.opengion.fukurou.util.FileUtil;
024 import org.opengion.fukurou.util.ApplicationInfo;
025 import org.opengion.fukurou.util.Closer;
026
027 import java.io.File;
028 import java.io.IOException;
029 import java.util.List;
030 import java.util.Arrays;
031
032 import java.sql.Connection;
033 import java.sql.PreparedStatement;
034 import java.sql.SQLException;
035
036 /**
037 * 【EXCEL取込】雛形EXCELシートと、データEXCELシートから???DBに??タを登録するクラスクラスです?
038 * 雛形EXCELシート?、{@カラ? で記述されており、このカラ??EXCEL上?セルの位置を?に?
039 * ??タEXCELシートから所定???タを読みこみ?形明細定義(GE57)で????ブルに
040 * 抜き出した??タを登録します?
041 * 雛形明細定義(GE57)では、シス?ID+帳票ID+シート番号をキーに、読み取る対応シートや
042 * シート毎にヘッ????ブル、?細??ブルの??繰返??カラ??して?どにより?
043 * 読取る方式と、書き込?ーブルを指定します?
044 *
045 * @og.rev 3.8.0.0 (2005/06/07) 新規追?
046 * @og.group 帳票シス?
047 *
048 * @version 4.0
049 * @author Kazuhiko Hasegawa
050 * @since JDK5.0,
051 */
052 public class ExcelInsert {
053 private static final String CR = HybsSystem.CR ;
054
055 private final StringBuilder errMsg ;
056
057 // DBTableReport に対して設定する情報
058 private final String EXCELIN ; // EXCEL ファイルの取込DIR ファイル名?、要求番号.xls
059
060 // 受け渡し変数
061 private final String SYSTEM_ID ;
062 private final String YKNO ;
063 private final String LISTID ;
064 private final boolean DEBUG ; // 3.8.5.0 (2006/03/06) ??用のフラグを追?
065
066 // GE54,GE57 帳票定義、?細??
067 private String MODELDIR = null; // GE54 雛形EXCEL?レクトリ
068 private String MODELFILE = null; // GE54 雛形EXCELファイル?
069 private String[] SHEETNO = null; // GE57 雛形EXCELシート番号
070 private String[] SHEETREF = null; // GE57 ??タEXCELシート番号
071 private String[] HEADDBID = null; // GE57 ヘッ????ブル
072 private String[] BODYDBID = null; // GE57 明細??ブル
073 private String[] LOOPCLM = null; // GE57 繰返??カラ?
074
075 private ExcelLayout layout = null;
076
077 // GE54,GE57 の帳票定義??を取得するSQL?す?
078 private static final String GE54_GE57_SELECT =
079 "SELECT A.MODELDIR,A.MODELFILE,B.SHEETNO,B.SHEETREF,B.HEADDBID,B.BODYDBID,B.LOOPCLM" +
080 " FROM GE54 A INNER JOIN GE57 B" +
081 " ON A.SYSTEM_ID = B.SYSTEM_ID AND A.LISTID = B.LISTID" +
082 " WHERE A.FGJ = '1' AND B.FGJ = '1'" +
083 " AND A.SYSTEM_ID = ?" +
084 " AND A.LISTID = ?" +
085 " ORDER BY B.SHEETNO" ;
086
087 /** コネクションにアプリケーション??を追記するかど???*/
088 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ;
089
090 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
091 private final ApplicationInfo appInfo;
092 private final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
093
094 /**
095 * コンストラクター
096 * 引数を受けとって、インスタンスを作?します?
097 *
098 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
099 *
100 * @param system_id シス?ID
101 * @param ykno 要求番号
102 * @param listId 帳票ID
103 * @param excelinDir 出力ディレクトリ
104 * @param debug ??フラグ
105 */
106 public ExcelInsert( final String system_id, final String ykno, final String listId, final String excelinDir, final boolean debug ) {
107 SYSTEM_ID = system_id;
108 YKNO = ykno;
109 LISTID = listId;
110 EXCELIN = excelinDir;
111 DEBUG = debug;
112 errMsg = new StringBuilder();
113
114 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
115 if( USE_DB_APPLICATION_INFO ) {
116 appInfo = new ApplicationInfo();
117 // ユーザーID,IPアドレス,ホスト名
118 appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME );
119 // 画面ID,操?プログラ?D
120 appInfo.setModuleInfo( "ExcelInsert",YKNO,LISTID );
121 }
122 else {
123 appInfo = null;
124 }
125 }
126
127 /**
128 * 変換処?実行します?
129 *
130 * @og.rev 3.8.0.9 (2005/10/17) エラーメ?ージ強?
131 *
132 * @return 結果 [true:正常/false:異常]
133 */
134 public boolean execute() {
135 System.out.print( "ExcelInsert Started ... " );
136 boolean flag ;
137
138 try {
139 // 初期?GE54,GE57 帳票定義マスタより?な??を取得します?
140 flag = initialDataSet();
141 if( flag ) { System.out.print( "INIT," ); }
142
143 // 雛型ファイルの存在チェ?を行います?
144 // 3.5.4.9 (2004/02/25) 存在チェ?エラー(原因不?)の暫定対?
145 File templateExcel = null;
146 if( flag ) {
147 templateExcel = FileUtil.checkFile( MODELDIR, MODELFILE + ".xls" );
148 flag = ( templateExcel != null ) ; // チェ?の結果?null なら?見つからなかった?
149 // 3.8.0.9 (2005/10/17) エラーメ?ージ強?
150 if( flag ) { System.out.print( "MDL IN," ); }
151 else {
152 errMsg.append( "ExcelInsert MODELFILE Not Found Error!" ).append( CR );
153 errMsg.append( "==============================" ).append( CR );
154 errMsg.append( "MODELDIR=" ).append( MODELDIR ).append( CR ) ;
155 errMsg.append( "MODELFILE=" ).append( MODELFILE ).append( ".xls" ) ;
156 errMsg.append( CR ) ;
157 }
158 }
159
160 // EXCEL??タファイルの存在チェ?を行います?
161 File inputExcel = null;
162 if( flag ) {
163 inputExcel = FileUtil.checkFile( EXCELIN, YKNO + ".xls" );
164 flag = ( inputExcel != null ) ; // チェ?の結果?null なら?見つからなかった?
165 // 3.8.0.9 (2005/10/17) エラーメ?ージ強?
166 if( flag ) { System.out.print( "XLS IN," ); }
167 else {
168 errMsg.append( "ExcelInsert EXCELIN Not Found Error!" ).append( CR );
169 errMsg.append( "==============================" ).append( CR );
170 errMsg.append( "DIR=" ).append( EXCELIN ).append( CR ) ;
171 errMsg.append( "FILE=" ).append( YKNO ).append( ".xls" ) ;
172 errMsg.append( CR ) ;
173 }
174 }
175
176 // 雛形ファイルより、??象行?を読み取ります?
177 if( flag ) {
178 flag = getModelData( templateExcel );
179 if( flag ) { System.out.print( "MDL DT," ); }
180 }
181
182 // EXCEL??タファイルを読取り、データベ?スに書き込みます?
183 if( flag ) {
184 flag = readAndInsertDB( inputExcel );
185 if( flag ) { System.out.print( "IN DB," ); }
186 }
187 }
188 catch ( RuntimeException ex ) {
189 errMsg.append( "ExcelInsert Execute Exception Error!" ).append( CR );
190 errMsg.append( "==============================" ).append( CR );
191 errMsg.append( StringUtil.stringStackTrace( ex ) ) ;
192 errMsg.append( CR ) ;
193 flag = false;
194 }
195
196 System.out.println( "End." );
197 return flag ;
198 }
199
200 /**
201 * 初期??タセ?を行います?
202 * ここでは、GE54,GE57 ??ブルより?な??を取得します?
203 *
204 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
205 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対?
206 *
207 * @return 結果 [true:正常/false:異常]
208 */
209 private boolean initialDataSet() {
210 String[] args = new String[] { SYSTEM_ID,LISTID };
211 // A.MODELDIR,A.MODELFILE,B.SHEETNO,B.SHEETREF,B.HEADDBID,B.BODYDBID,B.LOOPCLM
212 // String[][] vals = org.opengion.fukurou.db.DBUtil.dbExecute( GE54_GE57_SELECT,args,appInfo ); // 3.8.7.0 (2006/12/15)
213 String[][] vals = DBUtil.dbExecute( GE54_GE57_SELECT,args,appInfo, DBID ); // 3.8.7.0 (2006/12/15)
214 if( vals == null || vals.length == 0 ) {
215 errMsg.append( "Data does not exist in GE54 table." ).append( CR );
216 errMsg.append( "==============================" ).append( CR );
217 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
218 errMsg.append( "LISTID=[" ).append( LISTID ).append( "]" );
219 errMsg.append( CR );
220 return false;
221 }
222
223 int maxRow = vals.length; // 先?条件判断で、最?1 件以上存在する?
224 MODELDIR = StringUtil.nval( vals[0][0],MODELDIR );
225 MODELFILE = StringUtil.nval( vals[0][1],MODELFILE );
226
227 if( MODELDIR == null || MODELDIR.length() == 0 ||
228 MODELFILE == null || MODELFILE.length() == 0 ) {
229 errMsg.append( "MODELDIR and MODELFILE is necessary in GE54 table." ).append( CR );
230 errMsg.append( "==============================" ).append( CR );
231 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
232 errMsg.append( "LISTID=[" ).append( LISTID ).append( "] , " );
233 errMsg.append( "MODELDIR=[" ).append( MODELDIR ).append( "] , " );
234 errMsg.append( "MODELFILE=[" ).append( MODELFILE ).append( "] " );
235 errMsg.append( CR );
236 return false;
237 }
238
239 SHEETNO = new String[maxRow];
240 SHEETREF = new String[maxRow];
241 HEADDBID = new String[maxRow];
242 BODYDBID = new String[maxRow];
243 LOOPCLM = new String[maxRow];
244
245 for( int row=0; row<maxRow; row++ ) {
246 SHEETNO[row] = StringUtil.nval( vals[row][2],null );
247 SHEETREF[row] = StringUtil.nval( vals[row][3],null );
248 HEADDBID[row] = StringUtil.nval( vals[row][4],null );
249 BODYDBID[row] = StringUtil.nval( vals[row][5],null );
250 LOOPCLM[row] = StringUtil.nval( vals[row][6],null );
251
252 // SHEETNO と SHEETREF は、どちら?も???
253 // HEADDBID と BODYDBID は、どちら?か???
254 if( SHEETNO[row] == null || SHEETREF[row] == null ||
255 ( HEADDBID[row] == null && BODYDBID[row] == null ) ) {
256 errMsg.append( "SHEETNO と SHEETREF は、どちら?も???" ).append( CR );
257 errMsg.append( "HEADDBID と BODYDBID は、どちら?か???" ).append( CR );
258 errMsg.append( "==============================" ).append( CR );
259 errMsg.append( "SYSTEM_ID=[" ).append( SYSTEM_ID ).append( "] , " );
260 errMsg.append( "LISTID=[" ).append( LISTID ).append( "] , " );
261 errMsg.append( "SHEETNO=[" ).append( SHEETNO[row] ).append( "] , " );
262 errMsg.append( "SHEETREF=[" ).append( SHEETREF[row] ).append( "] , " );
263 errMsg.append( "HEADDBID=[" ).append( HEADDBID[row] ).append( "] , " );
264 errMsg.append( "BODYDBID=[" ).append( BODYDBID[row] ).append( "] " );
265 errMsg.append( CR );
266 return false;
267 }
268 }
269
270 return true;
271 }
272
273 /**
274 * 雛形ファイルより、対象行?を読み取ります?
275 *
276 * @param file 雛形ファイル
277 *
278 * @return 結果 [true:正常/false:異常]
279 */
280 private boolean getModelData( final File file ) {
281 try {
282 layout = HybsHSSFListener.makeExcelLayout( file,false );
283 }
284 catch( IOException ex ) {
285 errMsg.append( "Template Excel File can not ModelData." ).append( CR );
286 errMsg.append( "==============================" ).append( CR );
287 errMsg.append( "File=" ).append( file.getAbsolutePath() );
288 errMsg.append( StringUtil.stringStackTrace( ex ) );
289 errMsg.append( CR );
290 return false;
291 }
292
293 return true;
294 }
295
296 /**
297 * EXCELを読取り、データベ?スに書き込みます?
298 *
299 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
300 *
301 * @param file EXCELファイル
302 *
303 * @return 結果 [true:正常/false:異常]
304 */
305 private boolean readAndInsertDB( final File file ) {
306
307 ExcelDataPickup pickup = new ExcelDataPickup( layout,file,DEBUG );
308
309 // 実際の??タシート?枚数
310 int sheetSize = pickup.getSheetSize();
311 // SHEETREF に対して、実際に割り当てなおしたシート対?
312 int[] reference = makeSheetReference( sheetSize,SHEETREF );
313
314 DatabaseExecute exec = new DatabaseExecute();
315 exec.setApplicationInfo( appInfo ); // 3.8.7.0 (2006/12/15)
316 int ykno = Integer.parseInt(YKNO) ;
317 for( int shNo=0; shNo<sheetSize; shNo++ ) {
318 int ref = reference[shNo];
319 if( ref < 0 ) { continue; } // 処?象?
320
321 pickup.execute( Integer.parseInt( SHEETNO[ref] ),shNo,LOOPCLM[ref] ) ;
322
323 String headerQuery = layout.getHeaderInsertQuery( HEADDBID[ref] );
324 if( headerQuery != null ) {
325 exec.setStatement( headerQuery );
326
327 String[] headerData = layout.getHeaderInsertData( SYSTEM_ID,ykno,shNo );
328 exec.dbExecute( headerData );
329 }
330
331 String bodyQuery = layout.getBodyInsertQuery( BODYDBID[ref] );
332 if( bodyQuery != null ) {
333 exec.setStatement( bodyQuery );
334
335 List<String[]> bodyData = layout.getBodyInsertData( SYSTEM_ID,ykno,shNo );
336 for( int j=0; j<bodyData.size(); j++ ) {
337 // exec.dbExecute( (String[])bodyData.get(j) );
338 exec.dbExecute( bodyData.get(j) );
339 }
340 }
341 }
342 exec.commit();
343 pickup.close();
344
345 return true;
346 }
347
348 /**
349 * GE57 に??SHEETNOとSHEETREF配?より、実際にアクセスするシート番号に対応したリファレンス配?を求めます?
350 * SHEETNO は?形EXCELの使用するシート番号を指定します?SHEETREFは、その雛形シートを
351 * 利用して処?るデータEXCELのシートを?します?シート番号は?から始まります?
352 * こ?、データEXCELシー?SHEETREF)は、単?、カンマ結合、LAST??で?します?
353 * 単??雛形シートと?対?で対応するデータEXCELシート番号
354 * カンマ結合??,4,5 ??2,5 などの?シートをひとつの雛形シートで処?る?合に設定します?
355 * LAST??,LAST ?LAST と記述することで、それ以降?全??タシートを雛形シートで処?ます?
356 *
357 * ここでは、SHEETREF配? を実際の??タEXCELシート数??配?に再?置し?そ???アドレス?
358 * ?リファレンス??を返します?
359 * こ?リファレンス??を?に、SHEETNO,HEADDBID,BODYDBID,LOOPCLM などの??配?にアクセスし?
360 * 設定?を取得してきます?
361 *
362 * ?
363 * SHEETNO = { "1","2" ,"3","4" ,"6" };
364 * SHEETREF = { "1","2,6","4","5,3","8,LAST" };
365 * HEADDBID = { "A","B" ,"C","D" ,"E" };
366 * ??タシート数=11
367 *
368 * i=[0] , No=[1], REF=[1]
369 * i=[1] , No=[2], REF=[2,6]
370 * i=[2] , No=[3], REF=[4]
371 * i=[3] , No=[4], REF=[5,3]
372 * i=[4] , No=[6], REF=[8,LAST]
373 * =========================
374 * REF=[0] , Ref=[-1], SHEETNO[] = - , HEADDBID[] = -
375 * REF=[1] , Ref=[0], SHEETNO[[0]]=[1] , HEADDBID[[0]]=[A]
376 * REF=[2] , Ref=[1], SHEETNO[[1]]=[2] , HEADDBID[[1]]=[B]
377 * REF=[3] , Ref=[3], SHEETNO[[3]]=[4] , HEADDBID[[3]]=[D]
378 * REF=[4] , Ref=[2], SHEETNO[[2]]=[3] , HEADDBID[[2]]=[C]
379 * REF=[5] , Ref=[3], SHEETNO[[3]]=[4] , HEADDBID[[3]]=[D]
380 * REF=[6] , Ref=[1], SHEETNO[[1]]=[2] , HEADDBID[[1]]=[B]
381 * REF=[7] , Ref=[-1], SHEETNO[] = - , HEADDBID[] = -
382 * REF=[8] , Ref=[4], SHEETNO[[4]]=[6] , HEADDBID[[4]]=[E]
383 * REF=[9] , Ref=[4], SHEETNO[[4]]=[6] , HEADDBID[[4]]=[E]
384 * REF=[10] , Ref=[4], SHEETNO[[4]]=[6] , HEADDBID[[4]]=[E]
385 *
386 * @param size ??タシート?総件数
387 * @param sheetRef ??タEXCELシート?対応する??単?、カンマ結合、LAST??が使用可能)
388 *
389 * @return ??タ件数?再?置した?形EXCELシート番号配?。使用しな??合??1 がセ??
390 */
391 private int[] makeSheetReference( final int size,final String[] sheetRef ) {
392
393 int[] reference = new int[size];
394 Arrays.fill( reference ,-1 );
395
396 int maxNo = -1;
397 for( int i=0; i<sheetRef.length; i++ ) {
398 String[] temp = StringUtil.csv2Array( sheetRef[i] );
399 for( int j=0; j<temp.length; j++ ) {
400 if( temp[j].equals( "LAST" ) ) {
401 for( int k=maxNo; k<size; k++ ) {
402 reference[k] = i ;
403 }
404 i=size;
405 break;
406 }
407 else {
408 int no = Integer.parseInt(temp[j]) ;
409 if( no < size ) {
410 reference[no] = i ;
411 if( maxNo < no ) { maxNo = no+1; }
412 }
413 else {
414 String errMsg = "??タシートと雛形明細定義の対応ができません?
415 + " ??タシート総件数=[" + size + "] "
416 + " sheetRef[" + i + "]=" + sheetRef[i] ;
417 throw new HybsSystemException( errMsg );
418 }
419 }
420 }
421 }
422 return reference ;
423 }
424
425 /**
426 * エラーが存在した場合に、エラーメ?ージを返します?
427 *
428 * @return エラーメ?ージ String
429 */
430 public String getErrMsg() {
431 return errMsg.toString();
432 }
433 }
434
435 /**
436 * 連続し???タベ?ス処?行う為の、管???ラスです?
437 * ExcelInsert でのコー?ングを?けるため?のクラスです?
438 *
439 * オブジェクト作?時に、DEFAULT 接続を?にキープし、setStatement( String )で
440 * PreparedStatementオブジェクトを作?します?こ?メソ?を呼ぶまでは?
441 * 同じ PreparedStatementオブジェクトを使?けます?
442 * dbExecute( String[] ) メソ?で、PreparedStatement に設定する引数配?をセ?します?
443 * こ?段階では、commit も?PreparedStatementのclose も行いませんので??続して?
444 * dbExecute( String[] ) メソ?を呼び出すことが可能です?
445 * ?に、commit() で、Connection は、?ールに返されます?
446 *
447 * エラー時?、rollback() して、Connection は、??れます?
448 *
449 * @og.group 帳票シス?
450 *
451 * @version 4.0
452 * @author Kazuhiko Hasegawa
453 * @since JDK5.0,
454 */
455 class DatabaseExecute {
456 // 4.0.0.0 (2007/10/10) dbid の初期値を?"DEFAULT" から null に変更
457 // private static final String connID = "DEFAULT" ;
458 private static final String DBID = null ;
459
460 private Connection conn = null;
461 private PreparedStatement pstmt = null;
462 private String tempSql = null; // エラー時にSQL?表示させる?合に使用します?
463 private ApplicationInfo appInfo = null;
464
465 /**
466 * アクセスログ取得?為,ApplicationInfoオブジェクトを設定します?
467 *
468 * @og.rev 3.8.7.0 (2006/12/15) 新規追?
469 *
470 * @param appInfo ApplicationInfo
471 */
472 public void setApplicationInfo( final ApplicationInfo appInfo ) {
473 this.appInfo = appInfo;
474 }
475
476 /**
477 * PreparedStatementオブジェクトを作?します?
478 * 次に、このメソ?を呼ぶまでは、同?PreparedStatementオブジェクトを使?けます?
479 *
480 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
481 * @og.rev 4.0.0.1 (2007/12/03) try ??catch ??finally をきちんと行う?
482 *
483 * @param stmt String
484 */
485 public void setStatement( final String stmt ) {
486 boolean errFlag = true ;
487 tempSql = stmt;
488 try {
489 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設?
490 if( conn == null ) { conn = ConnectionFactory.connection( DBID,appInfo ); }
491 Closer.stmtClose( pstmt );
492 pstmt = conn.prepareStatement( stmt );
493 errFlag = false ;
494 }
495 catch (SQLException ex) {
496 String errMsg = "Statement を作?できませんでした? + HybsSystem.CR
497 + "SQL=[" + stmt + "]"
498 + ex.getMessage() + ":" + ex.getSQLState() ;
499 throw new HybsSystemException( errMsg,ex );
500 }
501 finally {
502 if( errFlag ) { errorFinally(); }
503 }
504 }
505
506 /**
507 * Connection ?commit します?
508 * こ?オブジェクトを終?る最後に行います?
509 *
510 */
511 public void commit() {
512 boolean errFlag = true ;
513 try {
514 conn.commit();
515 errFlag = false ;
516 }
517 catch (SQLException ex) {
518 Closer.rollback( conn );
519 String errMsg = "Connection をコミットできませんでした? + HybsSystem.CR
520 + ex.getMessage() + ":" + ex.getSQLState() ;
521 throw new HybsSystemException( errMsg,ex );
522 }
523 finally {
524 Closer.stmtClose( pstmt );
525 if( errFlag ) { ConnectionFactory.remove( conn,DBID ); }
526 else { ConnectionFactory.close( conn,DBID ); }
527 conn = null;
528 }
529 }
530
531 /**
532 * PreparedStatement に設定する引数配?をセ?します?
533 *
534 * こ?段階では、commit も?PreparedStatementのclose も行いませんので??続して?
535 * dbExecute( String[] ) メソ?を呼び出すことが可能です?
536 *
537 * @param args オブジェクト?引数配?
538 */
539 public void dbExecute( final String[] args ) {
540 // System.out.println( StringUtil.array2csv( args ) );
541
542 boolean errFlag = true ;
543 try {
544 for( int i=0; i<args.length; i++ ) {
545 pstmt.setString( i+1,args[i] );
546 }
547 pstmt.execute();
548 errFlag = false ;
549 }
550 catch (SQLException ex) {
551 String errMsg = "??タベ?ス処?実行できませんでした? + HybsSystem.CR
552 + "ARGS=[" + StringUtil.array2csv( args ) + "]" + HybsSystem.CR
553 + "SQL=[" + tempSql + "]"
554 + ex.getMessage() + ":" + ex.getSQLState() ;
555 throw new HybsSystemException( errMsg,ex );
556 }
557 finally {
558 if( errFlag ) { errorFinally(); }
559 }
560 }
561
562 /**
563 * エラー発生時の処?
564 *
565 * PreparedStatement のクローズと、Connection の破?行います?
566 */
567 private void errorFinally() {
568 Closer.stmtClose( pstmt );
569 pstmt = null;
570 Closer.rollback( conn );
571 ConnectionFactory.remove( conn,DBID );
572 conn = null;
573 }
574 }