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.taglib;
017
018 import org.opengion.hayabusa.common.HybsSystem;
019 import org.opengion.hayabusa.common.HybsSystemException;
020 import org.opengion.hayabusa.db.DBErrMsg;
021 import org.opengion.hayabusa.resource.GUIInfo;
022 import org.opengion.hayabusa.resource.ResourceManager;
023 import org.opengion.fukurou.db.Transaction;
024 import org.opengion.fukurou.db.TransactionReal;
025 import org.opengion.fukurou.util.ErrorMessage;
026 import org.opengion.fukurou.util.FileUtil;
027 import org.opengion.fukurou.util.StringUtil;
028 import org.opengion.fukurou.util.Closer ;
029 import static org.opengion.fukurou.util.StringUtil.nval ;
030
031 import java.util.Locale ;
032
033 import java.sql.Connection;
034 import java.sql.Statement;
035 import java.sql.CallableStatement;
036 import java.sql.ResultSet;
037 import java.sql.ResultSetMetaData;
038 import java.sql.SQLException;
039 import java.sql.Types;
040 // import java.sql.Array; // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ? 対応ã?oracle.sql.ARRAY の置き換ã�?
041 import oracle.sql.ARRAY; // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ? 対å¿?
042 import oracle.sql.ArrayDescriptor; // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ? 対å¿?
043 // import oracle.jdbc.OracleConnection; // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ? 対å¿?
044
045 import oracle.jdbc.OracleTypes; // CURSOR が残る
046 import oracle.jdbc.OracleCallableStatement; // CURSOR が残る
047
048 import java.io.File;
049 import java.io.PrintWriter;
050 import java.io.FileOutputStream;
051 import java.io.IOException;
052 import java.io.ObjectOutputStream;
053 import java.io.ObjectInputStream;
054 import java.util.zip.ZipOutputStream;
055 import java.util.zip.ZipEntry;
056
057 import java.util.Map;
058
059 /**
060 * SELECTæ–?‚’直接実行して、指定ã?ファイルに出力するタグですã?
061 *
062 * 中間ã?、データ(DBTableModel)を作æ?しなã�?�Ÿめã?余計なメモリを取らずã€?
063 * 高é?にãƒ??タを抜きå?すことが可能ですã?
064 * ä¸?–¹、抜きå?すデータは生データのため、データの再利用等ã?シスãƒ?ƒ çš?�ª
065 * 使用を想定してã�?�¾すã?
066 * JDBCErrMsg 形式ã?PL/SQL をコールして、その検索結果(カーソル)を抜きこともできますã?
067 *
068 * ※ こã?タグは、Transaction タグの対象ですã?
069 *
070 * @og.formSample
071 * ●形式ï¼?lt;og:directWriteTable filename="[?¥?¥?¥]" ?¥?¥?¥ >SELECT * FROM ZYXX </og:directWriteTable >
072 * ●body?šあã‚?EVAL_BODY_BUFFERED:BODYを評価しã?{@XXXX} を解析しまã�?
073 *
074 * ●Tag定義??
075 * <og:directWriteTable
076 * fileURL 【TAG】保存å?ãƒ?‚£レクトリ名をæŒ?®šしまã�?(初期値:FILE_URL[=filetemp/])
077 * filename 【TAG】ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしまã�?初期値:シスãƒ?ƒ パラメータのFILE_FILENAME)
078 * zipFilename 【TAG】ZIPファイルを作æ?するときã?ZIPファイル名をセãƒ?ƒˆしまã�?初期値:filename + ".zip")
079 * encode 【TAG】ファイルを作æ?するときã?ファイルエンコーãƒ?‚£ング名をセãƒ?ƒˆしまã�?(初期値:FILE_ENCODE[=UnicodeLittle])
080 * fileAppend 【TAG】追åŠ?ƒ¢ードで書き込ã‚?�‹どã�?�‹[true/false]を指定しまã�?初期値:false[通常モード])
081 * zip 【TAG】結果をファイルに出力するときに、ZIPで圧縮するかどã�?�‹[true/false]を指定しまã�?初期値:false)
082 * separator 【TAG】可変長ファイルを作æ?するときã?é ?›®区åˆ?‚Šæ–?—をセãƒ?ƒˆしまã�?(初期値:TAB_SEPARATOR[= ])
083 * useHeader 【TAG】ã?ãƒ?ƒ€ーを書き込ã‚?�‹どã�?�‹[true/false]を指定しまã�?初期値:true)
084 * displayMsg 【TAG】検索結果を画面上に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0033[ã€?»¶検索しました])
085 * notfoundMsg 【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])
086 * fetchSize 【TAGã€?通常は使ã�?�¾せん)ãƒ??タのフェãƒ?ƒ�サイズを指定しまã�?初期値:100)
087 * names 【TAG】PL/SQLを利用する場合ã?引数にセãƒ?ƒˆすべã�?ãƒ??タの名称をCSV形式でè¤?•°æŒ?®šしまã�?
088 * queryType 【TAG】Query を発行する為のクラスID(JDBC,JDBCErrMsg)を指定しまã�?{@og.doc03Link queryType 初期値:JDBC})
089 * dbid 【TAGã€?通常は使ã�?�¾せん)検索時ã?DB接続IDを指定しまã�?初期値:DEFAULT)
090 * useNumber 【TAG】行番号をå?力するかどã�?�‹(初期値:true)
091 * debug 【TAG】デバッグæƒ??をå?力するかどã�?�‹[true/false]を指定しまã�?初期値:false)
092 * > ... Body ...
093 * </og:directWriteTable>
094 *
095 * ●使用ä¾?
096 * <og:directWriteTable
097 * dbid = "ORCL" 接続データベã?スID(初期値:DEFAULT)
098 * separator = "," ファイルの区åˆ?‚Šæ–??初期値:タãƒ?
099 * fileURL = "{@USER.ID}" 保存å?ãƒ?‚£レクトリå�?
100 * filename = "{@filename}" 保存ファイルå�?
101 * encode = "UnicodeLittle" 保存ファイルエンコード名
102 * useHeader = "true" 保存ファイルにヘッãƒ??をå?力するかどã�?�‹
103 * zip = "true" ZIPファイルに圧縮するかどã�?�‹
104 * zipFilename = "Sample.zip" ZIPファイルのファイルå�?
105 * fileAppend = "true" ファイルを追åŠ?ƒ¢ードで登録するかどã�?�‹
106 * displayMsg = "MSG0033" 実行後ã?表示メãƒ?‚»ージ
107 * fetchSize = "200" DB検索する場合ã?フェãƒ?ƒ�するサイズ
108 * >
109 * SELECT * FROM ZYXX
110 * </og:directWriteTable >
111 *
112 * <og:directWriteTable
113 * fileURL = "{@USER.ID}" 保存å?ãƒ?‚£レクトリå�?
114 * filename = "{@filename}" 保存ファイルå�?
115 * names = "AAA,BBB,CCC,?¥?¥?¥" æŒ?®šã?キーに対応するリクエストå?ã‚?ARG_ARRAY にセãƒ?ƒˆしますã?
116 * queryType = "JDBCErrMsg" JDBCErrMsg 形式ã?PL/SQL をコールしますã?
117 * >
118 * { call PL/SQL(?,?,?,? ) }
119 * </og:directWriteTable >
120 *
121 * @og.rev 3.5.6.0 (2004/06/18) 新規作æ?
122 * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?の実行を追åŠ?
123 * @og.group ファイル出åŠ?
124 *
125 * @version 4.0
126 * @author Kazuhiko Hasegawa
127 * @since JDK5.0,
128 */
129 public class DirectWriteTableTag extends CommonTagSupport {
130 //* こã?プログラãƒ??VERSIONæ–?—å?を設定しますã? {@value} */
131 private static final String VERSION = "5.7.2.3 (2014/01/31)" ;
132
133 private static final long serialVersionUID = 572320140131L ;
134
135 private static final String TAB_SEPARATOR = "\t" ;
136 private static final String errMsgId = HybsSystem.ERR_MSG_KEY;
137
138 private final int DB_MAX_QUERY_TIMEOUT = HybsSystem.sysInt( "DB_MAX_QUERY_TIMEOUT" ) ;
139 // private static final String ARG_ARRAY = HybsSystem.sys( "ARG_ARRAY" ) ;
140 // private static final String ERR_MSG = HybsSystem.sys( "ERR_MSG" ) ;
141 // private static final String ERR_MSG_ARRAY = HybsSystem.sys( "ERR_MSG_ARRAY" ) ;
142 private static final String ARG_ARRAY = "ARG_ARRAY" ;
143 private static final String ERR_MSG = "ERR_MSG" ;
144 private static final String ERR_MSG_ARRAY = "ERR_MSG_ARRAY" ;
145
146 // 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
147 // private String dbid = "DEFAULT";
148 private String dbid = null;
149 private String separator = TAB_SEPARATOR; // é ?›®区åˆ?‚Šæ–??
150 private boolean useHeader = true; // ヘッãƒ??の使用可否
151 private String fileURL = HybsSystem.sys( "FILE_URL" );
152 private String filename = HybsSystem.sys( "FILE_FILENAME" ); // ファイルå�?
153 private String zipFilename = null; // ZIPファイルå�?
154 private String sql = null;
155 private String encode = HybsSystem.sys( "FILE_ENCODE" ); // ファイルエンコーãƒ?‚£ング "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
156 private boolean fileAppend = false; // ファイルをAPPENDモードで出力するか
157 private boolean zip = false; // ファイルをZIPするã�?
158 // private String displayMsg = "MSG0033"; // ã€?»¶検索しましたã€?
159 private String displayMsg = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
160 private String notfoundMsg = "MSG0077"; // 対象ãƒ??タはありませんでしたã€?
161 private long dyStart = 0; // 実行時間測定用のDIV要ç´?‚’出力しますã?
162 private int fetchSize = 100 ; // フェãƒ?ƒ�する行数(初期値:100)
163 private boolean useNumber = true; // 5.5.7.1(2012/10/05) 行番号出åŠ?
164
165 // 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?への対å¿?
166 private boolean queryType = true; // ノã?マルは、true/ JDBCErrMsg の時ã?、false
167 private String names = null; // æŒ?®šã?リクエスト変数をã?ARG_ARRAY にセãƒ?ƒˆしますã?
168 private int errCode = ErrorMessage.OK;
169 private transient ErrorMessage errMessage = null;
170
171 /**
172 * Taglibの開始タグが見つかったときに処ç�?�™ã‚?doStartTag() ã‚?オーバã?ライドしますã?
173 *
174 * @return 後続å?ç�??æŒ?¤º( EVAL_BODY_BUFFERED )
175 */
176 @Override
177 public int doStartTag() {
178 dyStart = System.currentTimeMillis(); // 時間測定用
179 return( EVAL_BODY_BUFFERED ); // Body を評価するã€? extends BodyTagSupport æ™?
180 }
181
182 /**
183 * Taglibのタグ本体を処ç�?�™ã‚?doAfterBody() ã‚?オーバã?ライドしますã?
184 *
185 * @og.rev 3.8.6.3 (2006/11/30) SQL æ–??前後ã?スペã?スを取り除きますã?
186 *
187 * @return 後続å?ç�??æŒ?¤º(SKIP_BODY)
188 */
189 @Override
190 public int doAfterBody() {
191 sql = getBodyString();
192 if( sql == null || sql.length() == 0 ) {
193 String errMsg = "BODY 部の検索用 Selectæ–??、å¿??ですã?";
194 throw new HybsSystemException( errMsg );
195 }
196 sql = sql.trim();
197 return(SKIP_BODY); // Body を評価しなã�?
198 }
199
200 /**
201 * Taglibの終äº?‚¿グが見つかったときに処ç�?�™ã‚?doEndTag() ã‚?オーバã?ライドしますã?
202 *
203 * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?への対å¿?
204 * @og.rev 4.0.0.0 (2007/10/18) メãƒ?‚»ージリソース統å�? getResource().getMessage â‡?getResource().getLabel )
205 *
206 * @return 後続å?ç�??æŒ?¤º
207 */
208 @Override
209 public int doEndTag() {
210 debugPrint(); // 4.0.0 (2005/02/28)
211
212 PrintWriter pw = null;
213 final int executeCount;
214 try {
215 if( zip ) {
216 String directory = HybsSystem.url2dir( fileURL );
217
218 if( zipFilename == null ) { zipFilename = filename + ".zip"; }
219 ZipOutputStream gzip = null;
220 try {
221 gzip = new ZipOutputStream(
222 new FileOutputStream(
223 StringUtil.urlAppend( directory,zipFilename )));
224 gzip.putNextEntry( new ZipEntry( filename ) );
225 pw = new PrintWriter( gzip );
226 executeCount = create( pw ) ;
227
228 pw.flush();
229 gzip.closeEntry();
230 gzip.finish() ;
231 }
232 finally {
233 Closer.ioClose( gzip ); // 4.0.0 (2006/01/31) close 処ç�?™‚の IOException を無è¦?
234 }
235 }
236 else {
237 pw = getPrintWriter();
238 executeCount = create( pw );
239 }
240 } catch( IOException ex ) {
241 String errMsg = "Error in DirectWriteTableTag: " + toString();
242 throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
243 } finally {
244 Closer.ioClose( pw ); // 4.0.0 (2006/01/31) close 処ç�?™‚の IOException を無è¦?
245 }
246
247 // 3.6.1.0 (2005/01/05) 検索結果の件数をã?"DB.COUNT" キーでリクエストにセãƒ?ƒˆするã€?
248 setRequestAttribute( "DB.COUNT" , String.valueOf( executeCount ) );
249 setRequestAttribute( "DB.ERR_CODE", String.valueOf( errCode ) );
250
251 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL );
252
253 // 実行件数の表示
254 // boolean useStatusBar = HybsSystem.sysBool( "VIEW_USE_DISPLAY_MSG" );
255 // if( useStatusBar && executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
256 if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) {
257 buf.append( executeCount );
258 // buf.append( getResource().getMessage( displayMsg ) );
259 buf.append( getResource().getLabel( displayMsg ) );
260 buf.append( HybsSystem.BR );
261 }
262 else if( executeCount == 0 && notfoundMsg != null && notfoundMsg.length() > 0 ) {
263 // buf.append( getResource().getMessage( notfoundMsg ) );
264 buf.append( getResource().getLabel( notfoundMsg ) );
265 buf.append( HybsSystem.BR );
266 }
267
268 // 3.6.1.0 (2005/01/05) TaglibUtil.makeHTMLErrorTable メソãƒ?ƒ‰を利用
269 String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() );
270 if( err != null && err.length() > 0 ) {
271 buf.append( err );
272 setSessionAttribute( errMsgId,errMessage );
273 }
274 else {
275 removeSessionAttribute( errMsgId );
276 }
277
278 jspPrint( buf.toString() );
279
280 // 時間測定用の DIV 要ç´?‚’出åŠ?
281 long dyTime = System.currentTimeMillis()-dyStart;
282 jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" ); // 3.5.6.3 (2004/07/12)
283
284 // 3.6.1.0 (2005/01/05) 警告時に停止してã�?�¾したがã?継続å?ç�?�•せますã?
285 int rtnCode = EVAL_PAGE;
286 if( errCode >= ErrorMessage.NG ) { // 異常
287 rtnCode = SKIP_PAGE;
288 }
289
290 // 4.0.0 (2005/01/31) セキュリãƒ?‚£チェãƒ?‚¯(ãƒ??タアクセス件数登録)
291 GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY );
292 if( guiInfo != null ) { guiInfo.addReadCount( executeCount,dyTime,sql ); }
293
294 return( rtnCode );
295 }
296
297 /**
298 * タグリブオブジェクトをリリースしますã?
299 * キャãƒ?‚·ュされて再利用されるã?で、フィールドã?初期設定を行いますã?
300 *
301 * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?への対å¿?
302 * @og.rev 4.0.0.0 (2007/10/10) dbid の初期値をã?"DEFAULT" から null に変更
303 * @og.rev 5.5.7.1 (2012/10/05) useNumber追åŠ?
304 */
305 @Override
306 protected void release2() {
307 super.release2();
308 separator = TAB_SEPARATOR; // é ?›®区åˆ?‚Šæ–??
309 fileURL = HybsSystem.sys( "FILE_URL" );
310 filename = HybsSystem.sys( "FILE_FILENAME" ); // ファイルå�?
311 zipFilename = null; // ZIPファイルå�?
312 sql = null;
313 encode = HybsSystem.sys( "FILE_ENCODE" ); // ファイルエンコーãƒ?‚£ング "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
314 fileAppend = false; // ファイルをAPPENDモードで出力するか
315 zip = false; // ファイルをZIPするã�?
316 // displayMsg = "MSG0033"; // ã€?»¶検索しましたã€?
317 displayMsg = HybsSystem.sys( "VIEW_DISPLAY_MSG" );
318 notfoundMsg = "MSG0077"; // 対象ãƒ??タはありませんでしたã€?
319 // dbid = "DEFAULT";
320 dbid = null;
321 fetchSize = 100 ; // フェãƒ?ƒ�する行数(初期値:0 参è?にしなã�?
322 dyStart = 0;
323 queryType = true; // ノã?マルは、true/ JDBCErrMsg の時ã?、false
324 names = null; // æŒ?®šã?リクエスト変数をã?ARG_ARRAY にセãƒ?ƒˆしますã?
325 errCode = ErrorMessage.OK;
326 errMessage = null;
327 useNumber = true; // 5.5.7.1 (2012/10/05)
328 }
329
330 /**
331 * 実オブジェクトを生æ?して?ŒOutputStream に書き込みますã?
332 *
333 * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?への対å¿?
334 * @og.rev 3.8.6.0 (2006/09/29) ヘッãƒ??にラベルをå?力するよã�?�«修正
335 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得ã?為,ApplicationInfoオブジェクトを設å®?
336 * @og.rev 4.3.4.3 (2008/12/22) (Oracle11gDriver対å¿?PL/SQLコールの場合にã€?クローズされた文ですã?"のエラーが発生する問題に対å¿?
337 * @og.rev 5.1.9.0 (2010/08/01) Transaction 対å¿?
338 * @og.rev 5.2.2.0 (2010/11/01) 改行を含ã‚??合ã?、ダブルクオートを強制çš?�«前後に追åŠ?�™るã?
339 * @og.rev 5.2.2.0 (2010/11/01) ãƒ?ƒ–ルクオートを含ã‚??合ã?、その直前にãƒ?ƒ–ルクオートを強制çš?�«追åŠ?�™るã?
340 * @og.rev 5.3.0.0 (2010/12/01) executeCall メソãƒ?ƒ‰の引数見直ã�?
341 * @og.rev 5.3.7.0 (2011/07/01) TransactionReal の引数変更
342 * @og.rev 5.5.7.1 (2012/10/05) useNumberの追åŠ?
343 *
344 * @param out PrintWriterオブジェクãƒ?
345 *
346 * @return 検索件数
347 */
348 private int create( final PrintWriter out ) {
349 final int executeCount;
350 Statement stmt = null;
351 CallableStatement callStmt = null; // 4.3.4.3 (2008/12/22)
352 ResultSet resultSet = null ;
353 boolean errFlag = true;
354 // Connection conn = null;
355 Transaction tran = null; // 5.1.9.0 (2010/08/01) Transaction 対å¿?
356 try {
357 // 5.1.9.0 (2010/08/01) Transaction 対å¿?
358 TransactionTag tranTag = (TransactionTag)findAncestorWithClass( this,TransactionTag.class );
359 if( tranTag == null ) {
360 // tran = new TransactionReal( dbid,getApplicationInfo() );
361 tran = new TransactionReal( getApplicationInfo() ); // 5.3.7.0 (2011/07/01) 引数変更
362 }
363 else {
364 tran = tranTag.getTransaction();
365 }
366 // conn = ConnectionFactory.connection( dbid,getApplicationInfo() ); // 3.8.7.0 (2006/12/15)
367
368 Connection conn = tran.getConnection( dbid ); // 5.1.9.0 (2010/08/01) Transaction 対å¿?
369 // 3.6.1.0 (2005/01/05)
370 if( queryType ) { // JDBC 通常の SELECT æ–?
371 stmt = conn.createStatement();
372 if( fetchSize > 0 ) { stmt.setFetchSize( fetchSize ); }
373 resultSet = stmt.executeQuery( sql );
374 }
375 else { // PL/SQL Call æ–?
376 String[] values = null;
377 if( names != null ) {
378 String[] nameArray = StringUtil.csv2Array( names );
379 values = getRequest( nameArray );
380 }
381 callStmt = conn.prepareCall( sql );
382 // resultSet = executeCall( conn,callStmt,sql,values ); // 4.3.4.3 (2008/12/22)
383 resultSet = executeCall( conn,callStmt,values ); // 5.3.0.0 (2010/12/01)
384 }
385 if( resultSet == null ) { return 0; }
386
387 ResultSetMetaData metaData = resultSet.getMetaData();
388 int numberOfColumns = metaData.getColumnCount();
389
390 // ヘッãƒ??部の出åŠ?
391 if( useHeader && numberOfColumns > 0 ) {
392 StringBuilder headName = new StringBuilder();
393 StringBuilder headLabel = new StringBuilder();
394 headName.append( "#Name" );
395 headLabel.append( "#Label" );
396 String clm ;
397 ResourceManager resource = getResource();
398 for(int column = 1; column <= numberOfColumns; column++) {
399 clm = (metaData.getColumnLabel(column)).toUpperCase(Locale.JAPAN);
400 headName.append( TAB_SEPARATOR ).append( clm );
401 headLabel.append( TAB_SEPARATOR ).append( resource.getLabel( clm ) );
402 }
403 out.println( headName.toString() );
404 out.println( headLabel.toString() );
405 }
406
407 int rowNo = 0;
408 Object obj ;
409 while( resultSet.next() ) {
410 if( useNumber ){ // 5.5.7.1 (2012/10/05)
411 out.print( rowNo ); // 行番号
412 }
413 for(int column = 1; column <= numberOfColumns; column++) {
414 if( column == 1 && !useNumber && !useHeader ){ // 5.5.7.1 (2012/10/05)
415 //こã?場合だけセパレータ出力しなã�?
416 }
417 else{
418 out.print( separator );
419 }
420 obj = resultSet.getObject(column);
421 if( obj != null ) {
422 // out.print( obj );
423 // 5.2.2.0 (2010/11/01) 改行ã?ãƒ?ƒ–ルクオート等ã?処ç�?
424 String sval = obj.toString();
425 if( sval.indexOf( '"' ) >= 0 ) { sval = sval.replaceAll( "\"" ,"\"\"" ) ; }
426 if( sval.indexOf( HybsSystem.CR ) >= 0 ) {
427 sval = "\"" + sval + "\"" ;
428 }
429 out.print( sval );
430 }
431 }
432 out.println();
433 rowNo++ ;
434 }
435 executeCount = rowNo ;
436 errFlag = false; // エラーではなã�?
437 }
438 catch ( SQLException ex ) { // 3.6.1.0 (2005/01/05)
439 String errMsg = "ãƒ??タベã?ス処ç�?‚’実行できませんでしたã€?
440 + HybsSystem.CR + stmt + HybsSystem.CR
441 + "err=[" + ex.getSQLState() + "]"
442 + ex.getMessage();
443 throw new HybsSystemException( errMsg,ex );
444 }
445 finally {
446 Closer.resultClose( resultSet );
447 Closer.stmtClose( stmt );
448 Closer.stmtClose( callStmt ); // 4.3.4.3 (2008/12/22)
449 if( tran != null ) { // 5.5.2.6 (2012/05/25) findbugs対å¿?
450 tran.close( errFlag ); // 5.1.9.0 (2010/08/01) Transaction 対å¿?
451 }
452 // if( errFlag ) { ConnectionFactory.remove( conn,dbid ); } // 削除
453 // else { ConnectionFactory.close( conn,dbid ); } // 返却
454 // conn = null;
455 }
456
457 return executeCount ;
458 }
459
460 /**
461 * 引数配å?付ã?クエリーを実行しますã?
462 * 処ç�??体ã?, #execute() と同様に、各サブクラスの実è£?�«依存しますã?
463 * これは、CallableStatement を用ã�?�¦、データベã?ス検索処ç�?‚’行いますã?
464 * {call TYPE3B01.TYPE3B01(?,?,?,?)} でã€?¼”番目の引数にはã€?
465 * names でæŒ?®šしたリクエスト情報がã?ARG_ARRAY 配å?にé ?¬¡セãƒ?ƒˆされますã?
466 * 使用する場合ã?、ä¸?—¦わかりæ?ã�?¤‰数に受けて利用してくださいã€?
467 * 呼び出ã�?PL/SQL では、検索系PL/SQL ですã?
468 *
469 * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?への対å¿?
470 * @og.rev 4.3.4.3 (2008/12/22) (Oracle11gDriver対å¿?PL/SQLコールの場合にã€?クローズされた文ですã?"のエラーが発生する問題に対å¿?
471 * @og.rev 5.3.0.0 (2010/12/01) executeCall メソãƒ?ƒ‰の引数見直ã�?
472 * @og.rev 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?
473 * @og.rev 5.7.2.3 (2014/01/31) Oracle11g(11.2.0.3のドライãƒ?対応ã?、Ver5 では行わなã�?戻ã�?ã€?
474 *
475 * @param conn コネクション
476 * @param callStmt コーラブルスãƒ??トメンãƒ?
477 * @param args オブジェクトã?引数配å?
478 *
479 * @return 結果オブジェクãƒ?
480 */
481 // private ResultSet executeCall( final Connection conn,final CallableStatement callStmt,final String sql,final String[] args ) throws SQLException {
482 private ResultSet executeCall( final Connection conn,final CallableStatement callStmt,final String[] args ) throws SQLException {
483 // CallableStatement callStmt = null ; // 4.3.4.3 (2008/12/22)
484 ResultSet resultSet = null;
485 // try {
486 // callStmt = conn.prepareCall( sql );
487 callStmt.setQueryTimeout( DB_MAX_QUERY_TIMEOUT );
488 if( fetchSize > 0 ) { callStmt.setFetchSize( fetchSize ); }
489 Map<String,Class<?>> map = conn.getTypeMap();
490 try {
491 map.put( ERR_MSG,Class.forName( "org.opengion.hayabusa.db.DBErrMsg" ) );
492 }
493 catch( ClassNotFoundException ex ) {
494 String errMsg = "org.opengion.hayabusa.db.DBErrMsg クラスが見つかりませんã€? + HybsSystem.CR
495 + ex.getMessage(); // // 5.1.8.0 (2010/07/01) errMsg 修正
496 throw new HybsSystemException( errMsg,ex ); // 3.5.5.4 (2004/04/15) 引数の並びé ?¤‰更
497 }
498
499 // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?http://docs.oracle.com/cd/E28389_01/web.1111/b60995/thirdparty.htm
500 ArrayDescriptor sd = ArrayDescriptor.createDescriptor( ARG_ARRAY, conn );
501 ARRAY newArray = new ARRAY( sd,conn,StringUtil.rTrims( args ) );
502 // Array newArray = ((OracleConnection)conn).createOracleArray( ARG_ARRAY, StringUtil.rTrims( args )); // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?
503
504 callStmt.registerOutParameter(1, Types.INTEGER);
505 callStmt.registerOutParameter(2, OracleTypes.ARRAY,ERR_MSG_ARRAY); // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?
506 // callStmt.registerOutParameter(2, Types.ARRAY,ERR_MSG_ARRAY); // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?
507 callStmt.registerOutParameter(3, OracleTypes.CURSOR);
508 ((OracleCallableStatement)callStmt).setARRAY( 4,newArray ); // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?
509 // callStmt.setArray( 4,newArray ); // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?
510
511 callStmt.execute();
512
513 errCode = callStmt.getInt(1);
514
515 if( errCode < ErrorMessage.NG ) { // 異常以外ã?場å�?
516 resultSet = ((OracleCallableStatement)callStmt).getCursor(3);
517 }
518 if( errCode > ErrorMessage.OK ) { // 正常以外ã?場å�?
519 ARRAY rtn3 = ((OracleCallableStatement)callStmt).getARRAY(2); // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?
520 // Array rtn3 = callStmt.getArray(2); // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3のドライãƒ?対å¿?
521 Object[] rtnval3 = (Object[])rtn3.getArray();
522 errMessage = new ErrorMessage( "Query_JDBCErrMsg Error!!" );
523 for( int i=0; i<rtnval3.length; i++ ) {
524 DBErrMsg er = (DBErrMsg)rtnval3[i];
525 if( er == null ) { break; }
526 errMessage.addMessage( er.getErrMsg() );
527 }
528 }
529 // }
530 // finally {
531 // Closer.stmtClose( callStmt );
532 // callStmt = null;
533 // }
534 return resultSet;
535 }
536
537 /**
538 * PrintWriter を取得しますã?
539 *
540 * ここでは、ä¸?ˆ¬çš?�ªファイル出力をè€??した PrintWriter を作æ?しますã?
541 *
542 * @og.rev 3.7.1.1 (2005/05/23) フォルãƒ?�Œなã�??合ã?、è¤?•°階層åˆ??フォルãƒ?‚’自動で作æ?しますã?
543 * @og.rev 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用ã€?
544 * @og.rev 5.6.1.0 (2013/02/01) 3.7.1.1のコメントに入ってã�?‚‹が対応されてã�?�ªã�??でフォルãƒ?½œæ?追åŠ?
545 *
546 * @return 出力用PrintWriterオブジェクãƒ?
547 */
548 private PrintWriter getPrintWriter() {
549 if( filename == null ) {
550 String errMsg = "ファイル名がセãƒ?ƒˆされてã�?�¾せんã€?;
551 throw new HybsSystemException( errMsg );
552 }
553 String directory = HybsSystem.url2dir( fileURL );
554
555 // 5.6.1.0 (2013/02/01)
556 File dir = new File(directory);
557 if( ! dir.exists() && ! dir.mkdirs() ) {
558 String errMsg = "ãƒ?‚£レクトリの作æ?に失敗しましたã€?" + directory + "]";
559 throw new HybsSystemException( errMsg );
560 }
561
562
563 // ※ 注æ„?StringUtil.urlAppend をçµ?�¿込んでã�?‚‹意図が不æ?。ä¸?—¦削除してã�?�¾すが、注æ„?
564 // 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用ã€?
565 // out = FileUtil.getPrintWriter( StringUtil.urlAppend( directory,filename ),fileAppend,encode);
566
567 // 処ç�?‚’簡ç´?Œ–しますã?
568 // PrintWriter out = FileUtil.getPrintWriter( new File( directory,filename ),encode,fileAppend );
569 // return out ;
570 return FileUtil.getPrintWriter( new File( directory,filename ),encode,fileAppend );
571 }
572
573 /**
574 * 名称配å?をå?に、リクエスト情報のãƒ??タを取得しますã?
575 *
576 * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?への対å¿?
577 *
578 * @param nameArray キーとなる名称の配å?
579 *
580 * @return そã?リクエスト情報
581 */
582 private String[] getRequest( final String[] nameArray ) {
583 String[] rtn = new String[nameArray.length];
584
585 for( int i=0; i<rtn.length; i++ ) {
586 rtn[i] = getRequestValue( nameArray[i] );
587 }
588
589 return rtn;
590 }
591
592 /**
593 * 【TAGã€?通常は使ã�?�¾せん)検索時ã?DB接続IDを指定しまã�?初期値:DEFAULT)ã€?
594 *
595 * @og.tag
596 * 検索時ã?DB接続IDを指定しますã?初期値は、DEFAULT ですã?
597 *
598 * @param id ãƒ??タベã?ス接続ID
599 */
600 public void setDbid( final String id ) {
601 dbid = nval( getRequestParameter( id ),dbid );
602 }
603
604 /**
605 * 【TAG】可変長ファイルを作æ?するときã?é ?›®区åˆ?‚Šæ–?—をセãƒ?ƒˆしまã�?
606 * (初期値:TAB_SEPARATOR[={@og.value #TAB_SEPARATOR}])ã€?
607 *
608 * @og.tag 可変長ファイルを作æ?するときã?é ?›®区åˆ?‚Šæ–?—をセãƒ?ƒˆしますã?
609 * (初期値:ローカル定義のTAB_SEPARATOR[={@og.value #TAB_SEPARATOR}])ã€?
610 *
611 * @param sep é ?›®区åˆ?‚Šæ–??
612 * @see #TAB_SEPARATOR
613 */
614 public void setSeparator( final String sep ) {
615 separator = nval( getRequestParameter( sep ),TAB_SEPARATOR );
616 }
617
618 /**
619 * 【TAG】保存å?ãƒ?‚£レクトリ名をæŒ?®šしまã�?
620 * (初期値:FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
621 *
622 * @og.tag
623 * こã?属æ?でæŒ?®šされるãƒ?‚£レクトリに、ファイルをセーブしますã?
624 * æŒ?®š方法ã?ã€??常の fileURL 属æ?と同様に、å?頭がã?'/' (UNIX) またã?ã€?¼’文字目がã?
625 * ":" (Windows)の場合ã?、指定ã?URLそã?ままのãƒ?‚£レクトリに、そã�?�§なã�??合ã?ã€?
626 * fileURL = "{@USER.ID}" とæŒ?®šすると、FILE_URL 属æ?でæŒ?®šã?フォルãƒ??下にã€?
627 * さらに、各個人ID別のフォルãƒ?‚’作æ?して、そこにセーブしますã?
628 * (初期値:シスãƒ?ƒ 定数のFILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
629 *
630 * @og.rev 3.5.4.3 (2004/01/05) å†?ƒ¨処ç�?‚’、makeFileURL に移動ã?
631 * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソãƒ?ƒ‰の利用
632 * @og.rev 4.0.0.0 (2007/11/20) æŒ?®šされたãƒ?‚£レクトリ名ã?æœ?¾Œが"\"or"/"で終わってã�?�ªã�??合にã€?/"を付加するã€?
633 *
634 * @param url 保存å?ãƒ?‚£レクトリå�?
635 * @see org.opengion.hayabusa.common.SystemData#FILE_URL
636 */
637 public void setFileURL( final String url ) {
638 String furl = nval( getRequestParameter( url ),null );
639 if( furl != null ) {
640 char ch = furl.charAt( furl.length()-1 );
641 if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
642 fileURL = StringUtil.urlAppend( fileURL,furl );
643 }
644 }
645
646 /**
647 * 【TAG】ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしまã�?初期値:シスãƒ?ƒ パラメータのFILE_FILENAME)ã€?
648 *
649 * @og.tag ファイルを作æ?するときã?ファイル名をセãƒ?ƒˆしますã?
650 *
651 * @param fname ファイルå�?
652 */
653 public void setFilename( final String fname ) {
654 filename = nval( getRequestParameter( fname ),filename );
655 }
656
657 /**
658 * 【TAG】ZIPファイルを作æ?するときã?ZIPファイル名をセãƒ?ƒˆしまã�?初期値:filename + ".zip")ã€?
659 *
660 * @og.tag
661 * zip 属æ?に、true を指定したå?合に、ZIPファイル化しますã?そã?場合ã?ファイル名をæŒ?®šしますã?
662 * なにも指定しなã�??合ã?、filename + ".zip" になりますã?
663 *
664 * @param zipFile ZIPファイルå�?
665 * @see #setZip( String )
666 */
667 public void setZipFilename( final String zipFile ) {
668 zipFilename = nval( getRequestParameter( zipFile ),zipFilename );
669 }
670
671 /**
672 * 【TAG】ファイルを作æ?するときã?ファイルエンコーãƒ?‚£ング名をセãƒ?ƒˆしまã�?
673 * (初期値:FILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])ã€?
674 *
675 * @og.tag
676 * "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
677 * (初期値:シスãƒ?ƒ 定数のFILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])ã€?
678 *
679 * @og.rev 2.2.0.0 (2002/12/17) 中国èª?国際化)対å¿?エンコードã?取得方法変更
680 * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE から、エンコード情報を取得するã?
681 *
682 * @param enc ファイルエンコーãƒ?‚£ングå�?
683 * @see <a href="http://www.iana.org/assignments/character-sets">IANA Charset Registry</a>
684 * @see org.opengion.hayabusa.common.SystemData#FILE_ENCODE
685 */
686 public void setEncode( final String enc ) {
687 encode = nval( getRequestParameter( enc ),encode );
688 }
689
690 /**
691 * 【TAG】ã?ãƒ?ƒ€ーを書き込ã‚?�‹どã�?�‹[true/false]を指定しまã�?初期値:true)ã€?
692 *
693 * @og.tag
694 * #Name ?¥?¥?¥?¥ ヘッãƒ??の書き込みを指定しますã?
695 * 通常は、書き込み(true)にしておき、使用側でコメントと解釈するよã�?�«
696 * 処ç�?‚’行うべきですã?コメントã?ため、append モードで途中に現れてã‚?
697 * 無視できますã?またã?エンジン標準でãƒ??タを取り込ã‚??合に、データの配置ã�?
698 * 変更されても取り込みプログラãƒ??そã?まま使用できますã?
699 * 初期値は、true(書き込ã‚?ですã?
700 *
701 * @param flag ヘッãƒ??を書き込ã‚?�‹どã�?�‹ [true:書き込ã‚?false:書き込まない]
702 */
703 public void setUseHeader( final String flag ) {
704 useHeader = nval( getRequestParameter( flag ),useHeader );
705 }
706
707 /**
708 * 【TAG】追åŠ?ƒ¢ードで書き込ã‚?�‹どã�?�‹[true/false]を指定しまã�?初期値:false[通常モード])ã€?
709 *
710 * @og.tag
711 * ファイルを書き込ã‚??合ã?追åŠ?ƒ¢ードで書き込ã‚?�‹どã�?�‹をセãƒ?ƒˆしますã?
712 * 新規モーãƒ?true)の場合ã?既存ã?ファイルが存在しã?かつ書き込み許可があれã?ã€?
713 * 上書きで新規に作æ?しますã?
714 * 初期値は、false(新規モーãƒ?ですã?
715 *
716 * @param flag [true:追åŠ?ƒ¢ーãƒ?false:新規モード]
717 */
718 public void setFileAppend( final String flag ) {
719 fileAppend = nval( getRequestParameter( flag ),fileAppend );
720 }
721
722 /**
723 * 【TAG】結果をファイルに出力するときに、ZIPで圧縮するかどã�?�‹[true/false]を指定しまã�?初期値:false)ã€?
724 *
725 * @og.tag
726 * 大量に抜き出すå?合ã?そã?まま、サーバã?から取り出すだけでも大変ですã?
727 * zip 属æ?をã?true にすると、GZIP で圧縮したファイルを作æ?しますã?
728 * 初期値は、false(圧縮しなã�?ですã?
729 *
730 * @param flag ZIPで圧縮 [true:する/それ以å¤?しない]
731 * @see #setZipFilename( String )
732 */
733 public void setZip( final String flag ) {
734 zip = nval( getRequestParameter( flag ),zip );
735 }
736
737 /**
738 * 【TAG】検索結果を画面上に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0033[ã€?»¶検索しました])ã€?
739 *
740 * @og.tag
741 * ここでは、検索結果の件数ã‚?™»録された件数をまずå?力しã€?
742 * そã?次に、ここでæŒ?®šしたメãƒ?‚»ージをリソースから取得して
743 * 表示しますã?
744 * 表示させたくなã�??合ã?, displayMsg = "" をセãƒ?ƒˆしてくださいã€?
745 * 初期値は、検索件数を表示しますã?
746 *
747 * @param id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
748 */
749 public void setDisplayMsg( final String id ) {
750 String ids = getRequestParameter( id );
751 if( ids != null ) { displayMsg = ids; }
752 }
753
754 /**
755 * 【TAG】検索結果がゼロ件の場合に表示するメãƒ?‚»ージリソースIDを指定しまã�?初期値:MSG0077[対象ãƒ??タはありませんでした])ã€?
756 *
757 * @og.tag
758 * ここでは、検索結果がゼロ件の場合ã?み、特別なメãƒ?‚»ージを表示させますã?
759 * 従来は、displayMsg と兼用で、ã?0ã€?»¶検索しました』とã�?�†表示でしたがã?
760 * displayMsg の初期表示は、OFF になりましたので、ゼロ件の場合ã?み別に表示させますã?
761 * 表示させたくなã�??合ã?, notfoundMsg = "" をセãƒ?ƒˆしてくださいã€?
762 * 初期値は、MSG0077[対象ãƒ??タはありませんでした]ですã?
763 *
764 * @param id ãƒ?‚£スプレイに表示させるメãƒ?‚»ージ ID
765 */
766 public void setNotfoundMsg( final String id ) {
767 String ids = getRequestParameter( id );
768 if( ids != null ) { notfoundMsg = ids; }
769 }
770
771 /**
772 * 【TAGã€?通常は使ã�?�¾せん)ãƒ??タのフェãƒ?ƒ�サイズを指定しまã�?初期値:100)ã€?
773 *
774 * @og.tag
775 * より多くの行がå¿?¦�なときに、データベã?スから取り出すå¿?¦�がある行数に
776 * つã�?�¦のヒントを JDBC ドライバに提供しますã?
777 * æŒ?®šされた行数は、この Statement を使って作æ?された結果セãƒ?ƒˆにã�?�‘影響しますã?
778 * æŒ?®šされた値ã�?0 の場合ã?ヒントã?無視されますã?
779 * 初期値はã€?00 ですã?
780 *
781 * @param size フェãƒ?ƒ�する行数(初期値:100)
782 */
783 public void setFetchSize( final String size ) {
784 fetchSize = nval( getRequestParameter( size ),fetchSize );
785 }
786
787 /**
788 * 【TAG】PL/SQLを利用する場合ã?引数にセãƒ?ƒˆすべã�?ãƒ??タの名称をCSV形式でè¤?•°æŒ?®šしますã?
789 *
790 * @og.tag
791 * è¤?•°ある場合ã?、カンマ区åˆ?‚Šæ–?—で渡しますã?
792 * PL/SQL を使用しなã�??合ã?、無視されますã?
793 *
794 * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?への対å¿?
795 *
796 * @param nm 引数の名称(è¤?•°ある場合ã?、カンマ区åˆ?‚Šæ–??
797 */
798 public void setNames( final String nm ) {
799 names = nval( getRequestParameter( nm ),names );
800 }
801
802 /**
803 * 【TAG】Query を発行する為のクラスID(JDBC,JDBCErrMsg)を指定しまã�?{@og.doc03Link queryType 初期値:JDBC})ã€?
804 *
805 * @og.tag
806 * ストアドã?ロシージャ等を実行するå?合に、queryType="JDBCErrMsg" ã‚?
807 * æŒ?®šするå¿?¦�がありますã?(それ以外ã?æŒ?®šã?、å?期å?の JDBC になりますã?)
808 * 初期値はã€?JDBC" ですã?
809 * {@og.doc03Link queryType Query_**** クラス}
810 *
811 * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg 形å¼?への対å¿?
812 *
813 * @param id Query を発行する為の実クラス ID
814 */
815 public void setQueryType( final String id ) {
816 // å†?ƒ¨çš?�«は、JDBCErrMsg:false / それ以å¤?true で管ç�?�—てã�?�¾すã?
817 queryType = ! "JDBCErrMsg".equalsIgnoreCase( getRequestParameter( id ) );
818 }
819
820 /**
821 * 【TAG】ファイルに行番号をå?力するかどã�?�‹(初期値:true)
822 *
823 * @og.tag
824 * ファイルに行番号をå?力するかどã�?�‹を指定しますã?
825 * 初期値は、true(出力すã‚?ですã?
826 *
827 * @og.rev 5.5.7.1 (2012/10/05) 新規追åŠ?
828 * @param flag 行番号出åŠ?[true:する/それ以å¤?しない]
829 */
830 public void setUseNumber( final String flag ) {
831 useNumber = nval( getRequestParameter( flag ),useNumber );
832 }
833
834 /**
835 * シリアライズ用のカスタãƒ?‚·リアライズ書き込みメソãƒ?ƒ‰
836 *
837 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
838 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
839 *
840 * @param strm ObjectOutputStreamオブジェクãƒ?
841 * @throws IOException シリアライズに関する入出力エラーが発生したå?å�?
842 */
843 private void writeObject( final ObjectOutputStream strm ) throws IOException {
844 strm.defaultWriteObject();
845 }
846
847 /**
848 * シリアライズ用のカスタãƒ?‚·リアライズ読み込みメソãƒ?ƒ‰
849 *
850 * ここでは、transient 宣è¨?�•れたå†?ƒ¨変数のå†??初期化がå¿?¦�なフィールドã?み設定しますã?
851 *
852 * @og.rev 4.0.0.0 (2006/09/31) 新規追åŠ?
853 * @serialData ä¸?ƒ¨のオブジェクトã?、シリアライズされませんã€?
854 *
855 * @param strm ObjectInputStreamオブジェクãƒ?
856 * @see #release2()
857 */
858 private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
859 strm.defaultReadObject();
860 }
861
862 /**
863 * こã?オブジェクトã?æ–?—å?表現を返しますã?
864 * 基本çš?�«ãƒ?ƒ�ãƒ?‚°目çš?�«使用しますã?
865 *
866 * @return こã?クラスのæ–?—å?表現
867 */
868 @Override
869 public String toString() {
870 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
871 .println( "VERSION" ,VERSION )
872 .println( "dbid" ,dbid )
873 .println( "separator" ,separator )
874 .println( "useHeader" ,useHeader )
875 .println( "fileURL" ,fileURL )
876 .println( "filename" ,filename )
877 .println( "zipFilename" ,zipFilename)
878 .println( "sql" ,sql )
879 .println( "encode" ,encode )
880 .println( "fileAppend" ,fileAppend )
881 .println( "zip" ,zip )
882 .println( "displayMsg" ,displayMsg )
883 .println( "dyStart" ,dyStart )
884 .println( "fetchSize" ,fetchSize )
885 .println( "queryType" ,queryType )
886 .println( "names" ,names )
887 .println( "errCode" ,errCode )
888 .println( "Other..." ,getAttributes().getAttribute() )
889 .fixForm().toString() ;
890 }
891 }