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 = "{&#064;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    }