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.2 (2014/01/24)" ;
132    
133            private static final long serialVersionUID = 572220140124L ;
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             * 実オブジェクトを生æ?ã—ã¦??del>PrintWriter</del>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             *
474             * @param       conn            コãƒã‚¯ã‚·ãƒ§ãƒ³
475             * @param   callStmt    コーラブルス�?トメン�
476             * @param   args                オブジェクトã?引数é…å?
477             *
478             * @return      çµæžœã‚ªãƒ–ジェクãƒ?
479             */
480    //      private ResultSet executeCall( final Connection conn,final CallableStatement callStmt,final String sql,final String[] args ) throws SQLException {
481            private ResultSet executeCall( final Connection conn,final CallableStatement callStmt,final String[] args ) throws SQLException {
482    //              CallableStatement callStmt = null ; // 4.3.4.3 (2008/12/22)
483                    ResultSet resultSet = null;
484    //              try {
485    //                      callStmt  = conn.prepareCall( sql );
486                            callStmt.setQueryTimeout( DB_MAX_QUERY_TIMEOUT );
487                            if( fetchSize > 0 ) { callStmt.setFetchSize( fetchSize ); }
488                            Map<String,Class<?>> map = conn.getTypeMap();
489                            try {
490                                    map.put( ERR_MSG,Class.forName( "org.opengion.hayabusa.db.DBErrMsg" ) );
491                            }
492                            catch( ClassNotFoundException ex ) {
493                                    String errMsg = "org.opengion.hayabusa.db.DBErrMsg クラスãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã€? + HybsSystem.CR
494                                                    + ex.getMessage();                      // // 5.1.8.0 (2010/07/01) errMsg 修正
495                                    throw new HybsSystemException( errMsg,ex );             // 3.5.5.4 (2004/04/15) 引数ã®ä¸¦ã³é ?¤‰æ›´
496                            }
497    
498                            // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?http://docs.oracle.com/cd/E28389_01/web.1111/b60995/thirdparty.htm
499    //                      ArrayDescriptor sd = ArrayDescriptor.createDescriptor( ARG_ARRAY, conn );
500    //                      ARRAY newArray = new ARRAY( sd,conn,StringUtil.rTrims( args ) );
501                            Array newArray = ((OracleConnection)conn).createOracleArray( ARG_ARRAY, StringUtil.rTrims( args ));             // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
502    
503                            callStmt.registerOutParameter(1, Types.INTEGER);
504    //                      callStmt.registerOutParameter(2, OracleTypes.ARRAY,ERR_MSG_ARRAY);      // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
505                            callStmt.registerOutParameter(2, Types.ARRAY,ERR_MSG_ARRAY);            // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
506                            callStmt.registerOutParameter(3, OracleTypes.CURSOR);
507    //                      ((OracleCallableStatement)callStmt).setARRAY( 4,newArray );                     // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
508                            callStmt.setArray( 4,newArray );                                                                        // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
509    
510                            callStmt.execute();
511    
512                            errCode = callStmt.getInt(1);
513    
514                            if( errCode < ErrorMessage.NG ) {            // 異常以外ã?å ´å?
515                                    resultSet = ((OracleCallableStatement)callStmt).getCursor(3);
516                            }
517                            if( errCode > ErrorMessage.OK ) {            // 正常以外ã?å ´å?
518    //                              ARRAY rtn3 = ((OracleCallableStatement)callStmt).getARRAY(2);   // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
519                                    Array rtn3 = callStmt.getArray(2);                                                              // 5.7.2.2 (2014/01/24) Oracle11g(11.2.0.3ã®ãƒ‰ãƒ©ã‚¤ãƒ?対å¿?
520                                    Object[] rtnval3 = (Object[])rtn3.getArray();
521                                    errMessage = new ErrorMessage( "Query_JDBCErrMsg Error!!" );
522                                    for( int i=0; i<rtnval3.length; i++ ) {
523                                            DBErrMsg er = (DBErrMsg)rtnval3[i];
524                                            if( er == null ) { break; }
525                                            errMessage.addMessage( er.getErrMsg() );
526                                    }
527                            }
528    //              }
529    //              finally {
530    //                      Closer.stmtClose( callStmt );
531    //                      callStmt = null;
532    //              }
533                    return resultSet;
534            }
535    
536            /**
537             * PrintWriter ã‚’å–å¾—ã—ã¾ã™ã?
538             *
539             * ã“ã“ã§ã¯ã€ä¸?ˆ¬çš?ªãƒ•ァイル出力をè€??ã—㟠PrintWriter を作æ?ã—ã¾ã™ã?
540             *
541             * @og.rev 3.7.1.1 (2005/05/23) フォルãƒ?Œãªã??åˆã?ã€è¤?•°éšŽå±¤åˆ??フォルãƒ?‚’自動ã§ä½œæ?ã—ã¾ã™ã?
542             * @og.rev 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用�
543             * @og.rev 5.6.1.0 (2013/02/01) 3.7.1.1ã®ã‚³ãƒ¡ãƒ³ãƒˆã«å…¥ã£ã¦ã?‚‹ãŒå¯¾å¿œã•れã¦ã?ªã??ã§ãƒ•ォルãƒ?½œæ?追åŠ?
544             *
545             * @return       出力用PrintWriterオブジェク�
546             */
547            private PrintWriter getPrintWriter() {
548                    if( filename == null ) {
549                            String errMsg = "ファイルåãŒã‚»ãƒ?ƒˆã•れã¦ã?¾ã›ã‚“ã€?;
550                            throw new HybsSystemException( errMsg );
551                    }
552                    String directory = HybsSystem.url2dir( fileURL );
553                    
554                    // 5.6.1.0 (2013/02/01) 
555                    File dir = new File(directory);
556                    if( ! dir.exists() && ! dir.mkdirs() ) {
557                            String errMsg = "ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä½œæ?ã«å¤±æ•—ã—ã¾ã—ãŸã€?" + directory + "]";
558                            throw new HybsSystemException( errMsg );
559                    }
560    
561    
562                    // ※ 注æ„?StringUtil.urlAppend ã‚’çµ?¿è¾¼ã‚“ã§ã?‚‹æ„図ãŒä¸æ?。ä¸?—¦å‰Šé™¤ã—ã¦ã?¾ã™ãŒã€æ³¨æ„?
563                    // 3.8.0.0 (2005/06/07) FileUtil#getPrintWriter を利用�
564            //      out = FileUtil.getPrintWriter( StringUtil.urlAppend( directory,filename ),fileAppend,encode);
565    
566    //              処ç?‚’ç°¡ç´?Œ–ã—ã¾ã™ã?
567    //              PrintWriter out = FileUtil.getPrintWriter( new File( directory,filename ),encode,fileAppend );
568    //              return out ;
569                    return FileUtil.getPrintWriter( new File( directory,filename ),encode,fileAppend );
570            }
571    
572            /**
573             * åç§°é…å?ã‚’å?ã«ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆæƒ…å ±ã®ãƒ??ã‚¿ã‚’å–å¾—ã—ã¾ã™ã?
574             *
575             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
576             *
577             * @param       nameArray       キーã¨ãªã‚‹åç§°ã®é…å?
578             *
579             * @return      ãã?リクエスト情報
580             */
581            private String[] getRequest( final String[] nameArray ) {
582                    String[] rtn = new String[nameArray.length];
583    
584                    for( int i=0; i<rtn.length; i++ ) {
585                            rtn[i] = getRequestValue( nameArray[i] );
586                    }
587    
588                    return rtn;
589            }
590    
591            /**
592             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)検索時ã?DB接続IDを指定ã—ã¾ã?åˆæœŸå€¤:DEFAULT)ã€?
593             *
594             * @og.tag
595             *   検索時ã?DB接続IDを指定ã—ã¾ã™ã?åˆæœŸå€¤ã¯ã€DEFAULT ã§ã™ã?
596             *
597             * @param       id ãƒ??タベã?ス接続ID
598             */
599            public void setDbid( final String id ) {
600                    dbid = nval( getRequestParameter( id ),dbid );
601            }
602    
603            /**
604             * ã€TAG】å¯å¤‰é•·ãƒ•ァイルを作æ?ã™ã‚‹ã¨ãã?é ?›®åŒºåˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã?
605             *              (åˆæœŸå€¤:TAB_SEPARATOR[={@og.value #TAB_SEPARATOR}])ã€?
606             *
607             * @og.tag å¯å¤‰é•·ãƒ•ァイルを作æ?ã™ã‚‹ã¨ãã?é ?›®åŒºåˆ?‚Šæ–?­—ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
608             * (åˆæœŸå€¤:ローカル定義ã®TAB_SEPARATOR[={@og.value #TAB_SEPARATOR}])ã€?
609             *
610             * @param   sep é ?›®åŒºåˆ?‚Šæ–?­?
611             * @see         #TAB_SEPARATOR
612             */
613            public void setSeparator( final String sep ) {
614                    separator = nval( getRequestParameter( sep ),TAB_SEPARATOR );
615            }
616    
617            /**
618             * ã€TAG】ä¿å­˜å?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªåã‚’æŒ?®šã—ã¾ã?
619             *              (åˆæœŸå€¤:FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
620             *
621             * @og.tag
622             * ã“ã?属æ?ã§æŒ?®šã•れるãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã€ãƒ•ァイルをセーブã—ã¾ã™ã?
623             * æŒ?®šæ–¹æ³•ã?ã€??常㮠fileURL 属æ?ã¨åŒæ§˜ã«ã€å?é ­ãŒã?'/' (UNIX) ã¾ãŸã?ã€?¼’文字目ãŒã?
624             * ":" (Windows)ã®å ´åˆã?ã€æŒ‡å®šã?URLãã?ã¾ã¾ã®ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã€ãã?§ãªã??åˆã?ã€?
625             * fileURL = "{&#064;USER.ID}" ã¨æŒ?®šã™ã‚‹ã¨ã€FILE_URL 属æ?ã§æŒ?®šã?フォルãƒ??下ã«ã€?
626             * ã•らã«ã€å„個人ID別ã®ãƒ•ォルãƒ?‚’作æ?ã—ã¦ã€ãã“ã«ã‚»ãƒ¼ãƒ–ã—ã¾ã™ã?
627             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®FILE_URL[={@og.value org.opengion.hayabusa.common.SystemData#FILE_URL}])ã€?
628             *
629             * @og.rev 3.5.4.3 (2004/01/05) å†?ƒ¨å‡¦ç?‚’ã€makeFileURL ã«ç§»å‹•ã?
630             * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソãƒ?ƒ‰ã®åˆ©ç”¨
631             * @og.rev 4.0.0.0 (2007/11/20) æŒ?®šã•れãŸãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªåã?æœ?¾ŒãŒ"\"or"/"ã§çµ‚ã‚ã£ã¦ã?ªã??åˆã«ã€?/"を付加ã™ã‚‹ã€?
632             *
633             * @param       url ä¿å­˜å?ãƒ?‚£ãƒ¬ã‚¯ãƒˆãƒªå?
634             * @see         org.opengion.hayabusa.common.SystemData#FILE_URL
635             */
636            public void setFileURL( final String url ) {
637                    String furl = nval( getRequestParameter( url ),null );
638                    if( furl != null ) {
639                            char ch = furl.charAt( furl.length()-1 );
640                            if( ch != '/' && ch != '\\' ) { furl = furl + "/"; }
641                            fileURL = StringUtil.urlAppend( fileURL,furl );
642                    }
643            }
644    
645            /**
646             * ã€TAG】ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:シスãƒ?ƒ ãƒ‘ラメータã®FILE_FILENAME)ã€?
647             *
648             * @og.tag ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
649             *
650             * @param   fname ファイルå?
651             */
652            public void setFilename( final String fname ) {
653                    filename = nval( getRequestParameter( fname ),filename );
654            }
655    
656            /**
657             * ã€TAG】ZIPファイルを作æ?ã™ã‚‹ã¨ãã?ZIPファイルåã‚’ã‚»ãƒ?ƒˆã—ã¾ã?åˆæœŸå€¤:filename + ".zip")ã€?
658             *
659             * @og.tag
660             * zip 属æ?ã«ã€true を指定ã—ãŸå?åˆã«ã€ZIPファイル化ã—ã¾ã™ã?ãã?å ´åˆã?ファイルåã‚’æŒ?®šã—ã¾ã™ã?
661             * ãªã«ã‚‚指定ã—ãªã??åˆã?ã€filename + ".zip" ã«ãªã‚Šã¾ã™ã?
662             *
663             * @param   zipFile ZIPファイルå?
664             * @see #setZip( String )
665             */
666            public void setZipFilename( final String zipFile ) {
667                    zipFilename = nval( getRequestParameter( zipFile ),zipFilename );
668            }
669    
670            /**
671             * ã€TAG】ファイルを作æ?ã™ã‚‹ã¨ãã?ファイルエンコーãƒ?‚£ãƒ³ã‚°åã‚’ã‚»ãƒ?ƒˆã—ã¾ã?
672             *              (åˆæœŸå€¤:FILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])ã€?
673             *
674             * @og.tag
675             * "DEFAULT","JISAutoDetect" ,"JIS", "EUC_JP", "MS932", "SJIS" , "Windows-31J" , "Shift_JIS"
676             * (åˆæœŸå€¤:シスãƒ?ƒ å®šæ•°ã®FILE_ENCODE[={@og.value org.opengion.hayabusa.common.SystemData#FILE_ENCODE}])ã€?
677             *
678             * @og.rev 2.2.0.0 (2002/12/17) 中国èª?国際化)対å¿?エンコードã?å–得方法変更
679             * @og.rev 3.1.3.0 (2003/04/10) FILE_ENCODE ã‹ã‚‰ã€ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰æƒ…報をå–å¾—ã™ã‚‹ã?
680             *
681             * @param   enc ファイルエンコーãƒ?‚£ãƒ³ã‚°å?
682             * @see     <a href="http://www.iana.org/assignments/character-sets">IANA Charset Registry</a>
683             * @see         org.opengion.hayabusa.common.SystemData#FILE_ENCODE
684             */
685            public void setEncode( final String enc ) {
686                    encode = nval( getRequestParameter( enc ),encode );
687            }
688    
689            /**
690             * ã€TAG】ã?ãƒ?ƒ€ãƒ¼ã‚’書ãè¾¼ã‚?‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:true)ã€?
691             *
692             * @og.tag
693             *  #Name ?¥?¥?¥?¥ ヘッãƒ??ã®æ›¸ãè¾¼ã¿ã‚’指定ã—ã¾ã™ã?
694             * 通常ã¯ã€æ›¸ãè¾¼ã¿(true)ã«ã—ã¦ãŠãã€ä½¿ç”¨å´ã§ã‚³ãƒ¡ãƒ³ãƒˆã¨è§£é‡ˆã™ã‚‹ã‚ˆã?«
695             * 処ç?‚’行ã†ã¹ãã§ã™ã?コメントã?ãŸã‚ã€append モードã§é€”中ã«ç¾ã‚Œã¦ã‚?
696             * 無視ã§ãã¾ã™ã?ã¾ãŸã?エンジン標準ã§ãƒ??ã‚¿ã‚’å–り込ã‚??åˆã«ã€ãƒ‡ãƒ¼ã‚¿ã®é…ç½®ã?
697             * 変更ã•れã¦ã‚‚å–り込ã¿ãƒ—ログラãƒ??ãã?ã¾ã¾ä½¿ç”¨ã§ãã¾ã™ã?
698             * åˆæœŸå€¤ã¯ã€true(書ãè¾¼ã‚?ã§ã™ã?
699             *
700             * @param   flag ヘッãƒ??を書ãè¾¼ã‚?‹ã©ã?‹ [true:書ãè¾¼ã‚?false:書ãè¾¼ã¾ãªã„]
701             */
702            public void setUseHeader( final String flag ) {
703                    useHeader = nval( getRequestParameter( flag ),useHeader );
704            }
705    
706            /**
707             * ã€TAG】追åŠ?ƒ¢ãƒ¼ãƒ‰ã§æ›¸ãè¾¼ã‚?‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false[通常モード])ã€?
708             *
709             * @og.tag
710             * ファイルを書ãè¾¼ã‚??åˆã?追åŠ?ƒ¢ãƒ¼ãƒ‰ã§æ›¸ãè¾¼ã‚?‹ã©ã?‹ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?
711             * æ–°è¦ãƒ¢ãƒ¼ãƒ?true)ã®å ´åˆã?既存ã?ファイルãŒå­˜åœ¨ã—ã?ã‹ã¤æ›¸ãè¾¼ã¿è¨±å¯ãŒã‚れã?ã€?
712             * 上書ãã§æ–°è¦ã«ä½œæ?ã—ã¾ã™ã?
713             * åˆæœŸå€¤ã¯ã€false(æ–°è¦ãƒ¢ãƒ¼ãƒ?ã§ã™ã?
714             *
715             * @param   flag [true:追åŠ?ƒ¢ãƒ¼ãƒ?false:æ–°è¦ãƒ¢ãƒ¼ãƒ‰]
716             */
717            public void setFileAppend( final String flag ) {
718                    fileAppend = nval( getRequestParameter( flag ),fileAppend );
719            }
720    
721            /**
722             * ã€TAGã€‘çµæžœã‚’ファイルã«å‡ºåŠ›ã™ã‚‹ã¨ãã«ã€ZIPã§åœ§ç¸®ã™ã‚‹ã‹ã©ã?‹[true/false]を指定ã—ã¾ã?åˆæœŸå€¤:false)ã€?
723             *
724             * @og.tag
725             * 大é‡ã«æŠœã出ã™å?åˆã?ãã?ã¾ã¾ã€ã‚µãƒ¼ãƒã?ã‹ã‚‰å–り出ã™ã ã‘ã§ã‚‚大変ã§ã™ã?
726             * zip 属æ?ã‚’ã?true ã«ã™ã‚‹ã¨ã€GZIP ã§åœ§ç¸®ã—ãŸãƒ•ァイルを作æ?ã—ã¾ã™ã?
727             * åˆæœŸå€¤ã¯ã€false(圧縮ã—ãªã?ã§ã™ã?
728             *
729             * @param  flag ZIPã§åœ§ç¸® [true:ã™ã‚‹/ãれ以å¤?ã—ãªã„]
730             * @see    #setZipFilename( String )
731             */
732            public void setZip( final String flag ) {
733                    zip = nval( getRequestParameter( flag ),zip );
734            }
735    
736            /**
737             * ã€TAGã€‘æ¤œç´¢çµæžœã‚’ç”»é¢ä¸Šã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0033[ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸ])ã€?
738             *
739             * @og.tag
740             * ã“ã“ã§ã¯ã€æ¤œç´¢çµæžœã®ä»¶æ•°ã‚?™»éŒ²ã•れãŸä»¶æ•°ã‚’ã¾ãšå?力ã—ã€?
741             * ãã?次ã«ã€ã“ã“ã§æŒ?®šã—ãŸãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’リソースã‹ã‚‰å–å¾—ã—ã¦
742             * 表示ã—ã¾ã™ã?
743             * 表示ã•ã›ãŸããªã??åˆã?, displayMsg = "" ã‚’ã‚»ãƒ?ƒˆã—ã¦ãã ã•ã„ã€?
744             * åˆæœŸå€¤ã¯ã€æ¤œç´¢ä»¶æ•°ã‚’表示ã—ã¾ã™ã?
745             *
746             * @param       id ãƒ?‚£ã‚¹ãƒ—レイã«è¡¨ç¤ºã•ã›ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ ID
747             */
748            public void setDisplayMsg( final String id ) {
749                    String ids = getRequestParameter( id );
750                    if( ids != null ) { displayMsg = ids; }
751            }
752    
753            /**
754             * ã€TAGã€‘æ¤œç´¢çµæžœãŒã‚¼ãƒ­ä»¶ã®å ´åˆã«è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ãƒªã‚½ãƒ¼ã‚¹IDを指定ã—ã¾ã?åˆæœŸå€¤:MSG0077[対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸ])ã€?
755             *
756             * @og.tag
757             * ã“ã“ã§ã¯ã€æ¤œç´¢çµæžœãŒã‚¼ãƒ­ä»¶ã®å ´åˆã?ã¿ã€ç‰¹åˆ¥ãªãƒ¡ãƒ?‚»ãƒ¼ã‚¸ã‚’表示ã•ã›ã¾ã™ã?
758             * 従æ¥ã¯ã€displayMsg ã¨å…¼ç”¨ã§ã€ã?0ã€?»¶æ¤œç´¢ã—ã¾ã—ãŸã€ã¨ã?†è¡¨ç¤ºã§ã—ãŸãŒã?
759             * displayMsg ã®åˆæœŸè¡¨ç¤ºã¯ã€OFF ã«ãªã‚Šã¾ã—ãŸã®ã§ã€ã‚¼ãƒ­ä»¶ã®å ´åˆã?ã¿åˆ¥ã«è¡¨ç¤ºã•ã›ã¾ã™ã?
760             * 表示ã•ã›ãŸããªã??åˆã?, notfoundMsg = "" ã‚’ã‚»ãƒ?ƒˆã—ã¦ãã ã•ã„ã€?
761             * åˆæœŸå€¤ã¯ã€MSG0077[対象ãƒ??ã‚¿ã¯ã‚りã¾ã›ã‚“ã§ã—ãŸ]ã§ã™ã?
762             *
763             * @param       id ãƒ?‚£ã‚¹ãƒ—レイã«è¡¨ç¤ºã•ã›ã‚‹ãƒ¡ãƒ?‚»ãƒ¼ã‚¸ ID
764             */
765            public void setNotfoundMsg( final String id ) {
766                    String ids = getRequestParameter( id );
767                    if( ids != null ) { notfoundMsg = ids; }
768            }
769    
770            /**
771             * ã€TAGã€?通常ã¯ä½¿ã?¾ã›ã‚“)ãƒ??ã‚¿ã®ãƒ•ã‚§ãƒ?ƒã‚µã‚¤ã‚ºã‚’指定ã—ã¾ã?åˆæœŸå€¤:100)ã€?
772             *
773             * @og.tag
774             * より多ãã®è¡ŒãŒå¿?¦ãªã¨ãã«ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ã?スã‹ã‚‰å–り出ã™å¿?¦ãŒã‚る行数ã«
775             * ã¤ã?¦ã®ãƒ’ントを JDBC ドライãƒã«æä¾›ã—ã¾ã™ã?
776             * æŒ?®šã•れãŸè¡Œæ•°ã¯ã€ã“ã® Statement を使ã£ã¦ä½œæ?ã•れãŸçµæžœã‚»ãƒ?ƒˆã«ã?‘影響ã—ã¾ã™ã?
777             * æŒ?®šã•れãŸå€¤ã?0 ã®å ´åˆã?ヒントã?無視ã•れã¾ã™ã?
778             * åˆæœŸå€¤ã¯ã€?00 ã§ã™ã?
779             *
780             * @param       size フェãƒ?ƒã™ã‚‹è¡Œæ•°(åˆæœŸå€¤:100)
781             */
782            public void setFetchSize( final String size ) {
783                    fetchSize = nval( getRequestParameter( size ),fetchSize );
784            }
785    
786            /**
787             * ã€TAG】PL/SQLを利用ã™ã‚‹å ´åˆã?引数ã«ã‚»ãƒ?ƒˆã™ã¹ã?ãƒ??ã‚¿ã®åç§°ã‚’CSVå½¢å¼ã§è¤?•°æŒ?®šã—ã¾ã™ã?
788             *
789             * @og.tag
790             * è¤?•°ã‚ã‚‹å ´åˆã?ã€ã‚«ãƒ³ãƒžåŒºåˆ?‚Šæ–?­—ã§æ¸¡ã—ã¾ã™ã?
791             * PL/SQL を使用ã—ãªã??åˆã?ã€ç„¡è¦–ã•れã¾ã™ã?
792             *
793             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
794             *
795             * @param       nm 引数ã®åç§°(è¤?•°ã‚ã‚‹å ´åˆã?ã€ã‚«ãƒ³ãƒžåŒºåˆ?‚Šæ–?­?
796             */
797            public void setNames( final String nm ) {
798                    names = nval( getRequestParameter( nm ),names );
799            }
800    
801            /**
802             * ã€TAG】Query を発行ã™ã‚‹ç‚ºã®ã‚¯ãƒ©ã‚¹ID(JDBC,JDBCErrMsg)を指定ã—ã¾ã?{@og.doc03Link queryType åˆæœŸå€¤:JDBC})ã€?
803             *
804             * @og.tag
805             * ストアドã?ロシージャ等を実行ã™ã‚‹å?åˆã«ã€queryType="JDBCErrMsg" ã‚?
806             * æŒ?®šã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?(ãれ以外ã?æŒ?®šã?ã€å?期å?ã® JDBC ã«ãªã‚Šã¾ã™ã?)
807             * åˆæœŸå€¤ã¯ã€?JDBC" ã§ã™ã?
808             * {@og.doc03Link queryType Query_**** クラス}
809             *
810             * @og.rev 3.6.1.0 (2005/01/05) PL/SQLコール(JDBCErrMsg å½¢å¼?ã¸ã®å¯¾å¿?
811             *
812             * @param       id Query を発行ã™ã‚‹ç‚ºã®å®Ÿã‚¯ãƒ©ã‚¹ ID
813             */
814            public void setQueryType( final String id ) {
815                    // å†?ƒ¨çš?«ã¯ã€JDBCErrMsg:false / ãれ以å¤?true ã§ç®¡ç?—ã¦ã?¾ã™ã?
816                    queryType = ! "JDBCErrMsg".equalsIgnoreCase( getRequestParameter( id ) );
817            }
818    
819            /**
820             * ã€TAG】ファイルã«è¡Œç•ªå·ã‚’å?力ã™ã‚‹ã‹ã©ã?‹(åˆæœŸå€¤:true)
821             *
822             * @og.tag
823             * ファイルã«è¡Œç•ªå·ã‚’å?力ã™ã‚‹ã‹ã©ã?‹ã‚’指定ã—ã¾ã™ã?
824             * åˆæœŸå€¤ã¯ã€true(出力ã™ã‚?ã§ã™ã?
825             * 
826             * @og.rev 5.5.7.1 (2012/10/05) æ–°è¦è¿½åŠ?
827             * @param  flag 行番å·å‡ºåŠ?[true:ã™ã‚‹/ãれ以å¤?ã—ãªã„]
828             */
829            public void setUseNumber( final String flag ) {
830                    useNumber = nval( getRequestParameter( flag ),useNumber );
831            }
832            
833            /**
834             * シリアライズ用ã®ã‚«ã‚¹ã‚¿ãƒ?‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºæ›¸ãè¾¼ã¿ãƒ¡ã‚½ãƒ?ƒ‰
835             *
836             * @og.rev 4.0.0.0 (2006/09/31) æ–°è¦è¿½åŠ?
837             * @serialData
838             *
839             * @param strm ObjectOutputStreamオブジェク�
840             */
841            private void writeObject( final ObjectOutputStream strm ) throws IOException {
842                    strm.defaultWriteObject();
843            }
844    
845            /**
846             * シリアライズ用ã®ã‚«ã‚¹ã‚¿ãƒ?‚·ãƒªã‚¢ãƒ©ã‚¤ã‚ºèª­ã¿è¾¼ã¿ãƒ¡ã‚½ãƒ?ƒ‰
847             *
848             * ã“ã“ã§ã¯ã€transient 宣è¨?•れãŸå†?ƒ¨å¤‰æ•°ã®å†??åˆæœŸåŒ–ãŒå¿?¦ãªãƒ•ィールドã?ã¿è¨­å®šã—ã¾ã™ã?
849             *
850             * @og.rev 4.0.0.0 (2006/09/31) æ–°è¦è¿½åŠ?
851             * @serialData
852             *
853             * @param strm ObjectInputStreamオブジェク�
854             * @see #release2()
855             */
856            private void readObject( final ObjectInputStream strm ) throws IOException , ClassNotFoundException {
857                    strm.defaultReadObject();
858            }
859    
860            /**
861             * ã“ã?オブジェクトã?æ–?­—å?表ç¾ã‚’è¿”ã—ã¾ã™ã?
862             * 基本çš?«ãƒ?ƒãƒ?‚°ç›®çš?«ä½¿ç”¨ã—ã¾ã™ã?
863             *
864             * @return ã“ã?ã‚¯ãƒ©ã‚¹ã®æ–?­—å?表ç¾
865             */
866            @Override
867            public String toString() {
868                    return org.opengion.fukurou.util.ToString.title( this.getClass().getName() )
869                                    .println( "VERSION"             ,VERSION        )
870                                    .println( "dbid"                ,dbid           )
871                                    .println( "separator"   ,separator      )
872                                    .println( "useHeader"   ,useHeader      )
873                                    .println( "fileURL"             ,fileURL        )
874                                    .println( "filename"    ,filename       )
875                                    .println( "zipFilename" ,zipFilename)
876                                    .println( "sql"                 ,sql            )
877                                    .println( "encode"              ,encode         )
878                                    .println( "fileAppend"  ,fileAppend     )
879                                    .println( "zip"                 ,zip            )
880                                    .println( "displayMsg"  ,displayMsg     )
881                                    .println( "dyStart"             ,dyStart        )
882                                    .println( "fetchSize"   ,fetchSize      )
883                                    .println( "queryType"   ,queryType      )
884                                    .println( "names"               ,names          )
885                                    .println( "errCode"             ,errCode        )
886                                    .println( "Other..."    ,getAttributes().getAttribute() )
887                                    .fixForm().toString() ;
888            }
889    }