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.fukurou.db;
017
018 import java.io.IOException;
019 import java.io.Reader;
020 import java.sql.Clob;
021 import java.sql.ResultSet;
022 import java.sql.ResultSetMetaData;
023 import java.sql.SQLException;
024 import java.sql.Types;
025 import java.sql.Date;
026 import java.sql.Timestamp;
027 import java.util.Locale;
028
029 import org.opengion.fukurou.util.Closer;
030 import org.opengion.fukurou.util.HybsDateUtil;
031 import static org.opengion.fukurou.util.HybsConst.CR; // 6.1.0.0 (2014/12/26) refactoring
032
033 /**
034 * ResultSet ã®ãƒ??タ処ç?‚’ã¾ã¨ã‚ãŸã‚¯ãƒ©ã‚¹ã§ã™ã?
035 * ã“ã“ã§ã¯ã€ResultSetMetaData ã‹ã‚‰ã€ã‚«ãƒ©ãƒ?•°ã€ã‚«ãƒ©ãƒ?(NAMEåˆ?ã€?
036 * Type属æ?ã‚’å–å¾—ã—ã€ResultSet ã§ã€å?を求ã‚る時ã«ã€Objectåž‹ã?
037 * 処ç?‚’行ã„ã¾ã™ã?
038 * Objectåž‹ã¨ã—ã¦ã¯ã€CLOBã€ROWIDã€TIMESTAMP åž‹ã?ã¿å–り扱ã£ã¦ã?¾ã™ã?
039 *
040 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
041 * @og.group ?¤?¢åˆ¶å¾¡
042 *
043 * @version 6.0
044 * @author Kazuhiko Hasegawa
045 * @since JDK6.0,
046 */
047 public class ResultSetValue {
048
049 // /** シスãƒ?ƒ ä¾å˜ã?改行記å·ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?4.0.0.0(2007/10/17) */
050 // private static final String CR = System.getProperty( "line.separator" );
051
052 private final ResultSet resultSet ; // å†?ƒ¨ã§ç®¡ç?™ã‚?ResultSet オブジェクãƒ?
053 private final int clmSize ; // カラãƒ?‚µã‚¤ã‚º
054 private final String[] names ; // カラ�(ResultSetMetaData#getColumnLabel(int) 㮠toUpperCase)
055 private final int[] type ; // java.sql.Types ã®å®šæ•°å®šç¾©
056 private final boolean useObj ; // オブジェクト型㮠Type ãŒå˜åœ¨ã™ã‚‹ã‹ã©ã?‹ã€?
057
058 private final int[] size ; // カラãƒ?‚µã‚¤ã‚º(ResultSetMetaData#getColumnDisplaySize(int))
059 private final boolean[] isWrit ; // 書ãè¾¼ã¿è¨±å¯(ResultSetMetaData#isWritable(int))
060
061 /**
062 * ResultSet を引数ã«ã¨ã‚‹ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿
063 *
064 * ã“ã“ã§ã€ã‚«ãƒ©ãƒ?‚µã‚¤ã‚ºã€ã‚«ãƒ©ãƒ?ã€java.sql.Types ã®å®šæ•°å®šç¾© ã‚’å–å¾—ã—ã¾ã™ã?
065 *
066 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
067 *
068 * @param res å†?ƒ¨ã§ç®¡ç?™ã‚‹ResultSetオブジェクãƒ?
069 * @throws java.sql.SQLException ãƒ??タベã?ス・アクセス・エラーãŒç™ºç”Ÿã—ãŸå?å?
070 */
071 public ResultSetValue( final ResultSet res ) throws SQLException {
072 resultSet = res;
073
074 final ResultSetMetaData metaData = resultSet.getMetaData();
075 clmSize = metaData.getColumnCount();
076 names = new String[clmSize];
077 type = new int[clmSize];
078 size = new int[clmSize];
079 isWrit = new boolean[clmSize];
080
081 boolean tempUseObj = false; // ãã‚‚ãã‚‚ã€ã‚ªãƒ–ジェクト系ã®ã‚«ãƒ©ãƒ?Œã‚ã‚‹ã‹ã©ã?‹
082 for( int i=0; i<clmSize; i++ ) {
083 final int tp = metaData.getColumnType( i+1 );
084 type[i] = tp ;
085 if( tp == Types.CLOB || tp == Types.ROWID || tp == Types.TIMESTAMP ) { tempUseObj = true; }
086 names[i] = metaData.getColumnLabel(i+1).toUpperCase(Locale.JAPAN) ;
087 size[i] = metaData.getColumnDisplaySize(i+1) ;
088 isWrit[i] = metaData.isWritable(i+1) ;
089 }
090 useObj = tempUseObj ;
091 }
092
093 /**
094 * ResultSetMetaData ã§æ±‚ã‚ãŸã?カラãƒ?•°ã‚’è¿”ã—ã¾ã™ã?
095 *
096 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
097 *
098 * @return カラãƒ?•°(ãƒ??ã‚¿ã®åˆ—æ•°)
099 */
100 public int getColumnCount() { return clmSize ; }
101
102 /**
103 * カラãƒ?é…å?ã‚’è¿”ã—ã¾ã™ã?
104 *
105 * é…å?ã¯ã€?ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1 ã¾ã§ã®æ–?—åž‹é…å?ã«è¨å®šã•れã¾ã™ã?
106 * カラãƒ?ã¯ã€ResultSetMetaData#getColumnLabel(int) ã‚?toUpperCase ã—ãŸ
107 * 大æ–?—ãŒè¿”ã•れã¾ã™ã?
108 *
109 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
110 *
111 * @return カラãƒ?é…å?
112 * @og.rtnNotNull
113 */
114 public String[] getNames() {
115 return names.clone();
116 }
117
118 /**
119 * æŒ?®šã?カラãƒ?•ªå·ã®ã‚«ãƒ©ãƒ?ã‚’è¿”ã—ã¾ã™ã?
120 *
121 * カラãƒ?ã‚’å–å¾—ã™ã‚‹ã?カラãƒ?•ªå·ã¯ã€?ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1 ã¾ã§ã®æ•°å—ã§æŒ?®šã—ã¾ã™ã?
122 * ãƒ??タベã?ス上ã?ã€?ã‹ã‚‰å§‹ã¾ã‚‹ç•ªå·ã¨ã¯ã€ç•°ãªã‚Šã¾ã™ã?
123 * カラãƒ?ã¯ã€ResultSetMetaData#getColumnLabel(int) ã‚?toUpperCase ã—ãŸ
124 * 大æ–?—ãŒè¿”ã•れã¾ã™ã?
125 *
126 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
127 *
128 * @param clmNo カラãƒ?•ªå· (0ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1ã¾ã§ã®æ•°å?
129 * @return æŒ?®šã?カラãƒ?•ªå·ã®ã‚«ãƒ©ãƒ?
130 */
131 public String getColumnName( final int clmNo ) {
132 return names[clmNo];
133 }
134
135 // /**
136 // * java.sql.Types ã®å®šæ•°å®šç¾©é…å?ã‚’è¿”ã—ã¾ã™ã?
137 // *
138 // * é…å?ã¯ã€?ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1 ã¾ã§ã®intåž‹é?列ã«è¨å®šã•れã¾ã™ã?
139 // * Types ã®å®šæ•°å®šç¾©ã¯ã€ResultSetMetaData#getColumnType(int) ã®å€¤ã§ã™ã?
140 // *
141 // * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
142 // *
143 // * @return カラãƒ?0?žã‚«ãƒ©ãƒ?•°-1)ã«å¯¾å¿œã—ãŸã?Types定数定義é…å?
144 // */
145 // public int[] getSqlTypes() {
146 // return type.clone();
147 // }
148
149 /**
150 * æŒ?®šã?カラãƒ?•ªå·ã®java.sql.Types ã®å®šæ•°å®šç¾©ã‚’è¿”ã—ã¾ã™ã?
151 *
152 * é…å?ã¯ã€?ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1 ã¾ã§ã®intåž‹é?列ã«è¨å®šã•れã¾ã™ã?
153 * Types ã®å®šæ•°å®šç¾©ã¯ã€ResultSetMetaData#getColumnType(int) ã®å€¤ã§ã™ã?
154 *
155 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
156 *
157 * @param clmNo カラãƒ?•ªå· (0ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1ã¾ã§ã®æ•°å?
158 * @return æŒ?®šã?カラãƒ?•ªå·ã®Types定数
159 */
160 public int getSqlType( final int clmNo ) {
161 return type[clmNo];
162 }
163
164 // /**
165 // * オブジェクト型㮠Type ãŒå˜åœ¨ã™ã‚‹ã‹ã©ã?‹[true:å˜åœ¨ã™ã‚‹/false:å˜åœ¨ã—ãªã„]ã‚’è¿”ã—ã¾ã™ã?
166 // *
167 // * 基本çš?«ã¯ã€å?を求ã‚ã‚‹å?ç??å†?ƒ¨ãƒã‚¸ãƒ?‚¯ã§ã®ã¿ä½¿ç”¨ã—ã¾ã™ã?
168 // * Types.CLOB ã€Types.ROWIDã€Types.TIMESTAMP ãŒã?Types定義ã«å«ã¾ã‚Œã¦ã?‚‹å ´åˆã?
169 // * true ã‚’è¿”ã—ã¾ã™ã?
170 // * å«ã¾ã‚Œãªã??åˆã?ã€false ã§ã™ã?
171 // * オブジェクト型 ãŒå˜åœ¨ã™ã‚‹å ´åˆã?値を求ã‚ã‚‹å?ç?«ã€å°‚用ã®ãƒ¡ã‚½ãƒ?ƒ‰ãŒå¿?¦ã«ãªã‚Šã¾ã™ã?
172 // * å«ã¾ã‚Œãªã??åˆã?ã€String.valueOf( Object ) ã§æ±‚ã‚ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã?
173 // * ã“ã?値をå‚è€?«ã€å‘¼ã³å‡ºã™ãƒ¡ã‚½ãƒ?ƒ‰ã‚’変ãˆã‚‹ã“ã¨ã§ã€å?ç??高é?化を図ã‚ã†ã¨
174 // * è€?ˆã¦ã?¾ã™ã?(効果ãŒã‚ã‚‹ã‹ã©ã?‹ã¯ã€åˆ¤ã‚Šã¾ã›ã‚“ã€?
175 // *
176 // * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
177 // *
178 // * @return オブジェクト型㮠Type ãŒå˜åœ¨ã™ã‚‹ã‹ã©ã?‹[true:å˜åœ¨ã™ã‚‹/false:å˜åœ¨ã—ãªã„]
179 // */
180 // public boolean useObjectType() {
181 // return useObj;
182 // }
183
184 /**
185 * カラãƒ??サイズã®inté…å?ã‚’è¿”ã—ã¾ã™ã?
186 *
187 * é…å?ã¯ã€?ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1 ã¾ã§ã®intåž‹é?列ã«è¨å®šã•れã¾ã™ã?
188 * カラãƒ??サイズã¯ã€ResultSetMetaData#getColumnDisplaySize(int) ã®å€¤ã§ã™ã?
189 *
190 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
191 *
192 * @return カラãƒ??サイズã®inté…å?
193 * @og.rtnNotNull
194 */
195 public int[] getColumnDisplaySizes() {
196 return size.clone();
197 }
198
199 /**
200 * æŒ?®šã?カラãƒ?•ªå·ã®ã‚µã‚¤ã‚ºã‚’è¿”ã—ã¾ã™ã?
201 *
202 * カラãƒ??サイズã¯ã€ResultSetMetaData#getColumnDisplaySize(int) ã®å€¤ã§ã™ã?
203 *
204 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
205 *
206 * @param clmNo カラãƒ?•ªå· (0ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1ã¾ã§ã®æ•°å?
207 * @return æŒ?®šã?カラãƒ?•ªå·ã®ã‚µã‚¤ã‚º
208 */
209 public int getColumnDisplaySize( final int clmNo ) {
210 return size[clmNo];
211 }
212
213 /**
214 * カラãƒ??書ãè¾¼ã¿å¯èƒ½ã‹ã©ã?‹ã®booleané…å?ã‚’è¿”ã—ã¾ã™ã?
215 *
216 * é…å?ã¯ã€?ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1 ã¾ã§ã®intåž‹é?列ã«è¨å®šã•れã¾ã™ã?
217 * カラãƒ??書ãè¾¼ã¿å¯èƒ½ã‹ã©ã?‹ã¯ã€ResultSetMetaData#isWritable(int) ã®å€¤ã§ã™ã?
218 *
219 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
220 *
221 * @return 書ãè¾¼ã¿å¯èƒ½ã‹ã©ã?‹ã®booleané…å?
222 * @og.rtnNotNull
223 */
224 public boolean[] isWritable() {
225 return isWrit.clone();
226 }
227
228 /**
229 * æŒ?®šã?書ãè¾¼ã¿å¯èƒ½ã‹ã©ã?‹ã‚’è¿”ã—ã¾ã™ã?
230 *
231 * カラãƒ??書ãè¾¼ã¿å¯èƒ½ã‹ã©ã?‹ã¯ã€ResultSetMetaData#isWritable(int) ã®å€¤ã§ã™ã?
232 *
233 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
234 *
235 * @param clmNo カラãƒ?•ªå· (0ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1ã¾ã§ã®æ•°å?
236 * @return 書ãè¾¼ã¿å¯èƒ½ã‹ã©ã?‹
237 */
238 public boolean isWritable( final int clmNo ) {
239 return isWrit[clmNo];
240 }
241
242 /**
243 * カーソルをç¾åœ¨ã®ä½ç½®ã‹ã‚‰é ?–¹å‘ã«1行移動ã—ã¾ã™ã?
244 *
245 * ResultSet#next() を呼ã³å‡ºã—ã¦ã?¾ã™ã?
246 * çµæžœã¯,ã™ã¹ã¦æ–?—å?ã«å¤‰æ›ã•ã‚Œã¦æ ¼ç´ã•れã¾ã™ã?
247 *
248 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
249 *
250 * @return æ–°ã—ã„ç¾åœ¨ã®è¡ŒãŒæœ‰åйã§ã‚ã‚‹å ´åˆã?trueã€è¡ŒãŒãれ以上å˜åœ¨ã—ãªã??åˆã?false
251 * @see java.sql.ResultSet#next()
252 * @throws java.sql.SQLException ãƒ??タベã?ス・アクセス・エラーãŒç™ºç”Ÿã—ãŸå?åˆã?ã¾ãŸã?ã“ã?メソãƒ?ƒ‰ãŒã‚¯ãƒãƒ¼ã‚ºã•れãŸçµæžœã‚»ãƒ?ƒˆã§å‘¼ã³å‡ºã•れãŸå?å?
253 */
254 public boolean next() throws SQLException {
255 return resultSet.next() ;
256 }
257
258 /**
259 * ç¾åœ¨ã®ã‚«ãƒ¼ã‚½ãƒ«ä½ç½®ã«ã‚るレコードã?カラãƒ?•ªå·ã®ãƒ??ã‚¿ã‚’å–å¾—ã—ã¾ã™ã?
260 *
261 * ResultSet#getObject( clmNo+1 ) を呼ã³å‡ºã—ã¦ã?¾ã™ã?
262 * 引数ã®ã‚«ãƒ©ãƒ?•ªå·ã¯ã€?ã‹ã‚‰å§‹ã¾ã‚Šã¾ã™ãŒã€ResultSet ã®ã‚«ãƒ©ãƒ??ã¯ã€?ã‹ã‚‰å§‹ã¾ã‚Šã¾ã™ã?
263 * æŒ?®šã?ã€?ã‹ã‚‰å§‹ã¾ã‚‹ã‚«ãƒ©ãƒ?•ªå·ã§ã™ã?
264 * çµæžœã¯,ã™ã¹ã¦æ–?—å?ã«å¤‰æ›ã•れã¦è¿”ã•れã¾ã™ã?
265 * ã¾ãŸã?null オブジェクトã?å ´åˆã‚‚ã€ã‚¼ãƒæ–?—å?ã«å¤‰æ›ã•れã¦è¿”ã•れã¾ã™ã?
266 *
267 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?: org.opengion.hayabusa.db.DBUtil#getValue( ResultSet , int , int ) ã‹ã‚‰ç§»å‹?
268 *
269 * @param clmNo カラãƒ?•ªå· (0ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1ã¾ã§ã®æ•°å?
270 * @return ç¾åœ¨è¡Œã?カラãƒ?•ªå·ã®ãƒ??ã‚¿(æ–?—å?)
271 * @throws java.sql.SQLException ãƒ??タベã?ス・アクセス・エラーãŒç™ºç”Ÿã—ãŸå?å?
272 */
273 public String getValue( final int clmNo ) throws SQLException {
274 final String val ;
275 final Object obj = resultSet.getObject( clmNo+1 );
276 if( obj == null ) {
277 val = "";
278 }
279 else if( useObj ) {
280 switch( type[clmNo] ) {
281 case Types.CLOB : val = getClobData( (Clob)obj ) ;
282 break;
283 case Types.ROWID: val = resultSet.getString(clmNo+1);
284 break;
285 case Types.TIMESTAMP : val = HybsDateUtil.getDate( ((Timestamp)obj).getTime() , "yyyyMMddHHmmss" );
286 break;
287 default : val = String.valueOf( obj );
288 break;
289 }
290 }
291 else {
292 val = String.valueOf( obj );
293 }
294
295 return val ;
296 }
297
298 /**
299 * ç¾åœ¨ã®ã‚«ãƒ¼ã‚½ãƒ«ä½ç½®ã«ã‚るレコードã?全カラãƒ?ƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã—ã¾ã™ã?
300 *
301 * #getValue( clmNo ) ã‚’ã?0ã‹ã‚‰ã€ã‚«ãƒ©ãƒ?•°-1 ã¾ã§å‘¼ã³å‡ºã—ã¦æ±‚ã‚ãŸæ–‡å—å?é…å?ã‚’è¿”ã—ã¾ã™ã?
302 *
303 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?
304 *
305 * @return ç¾åœ¨è¡Œã?全カラãƒ?ƒ‡ãƒ¼ã‚¿ã®æ–?—å?é…å?
306 * @throws java.sql.SQLException ãƒ??タベã?ス・アクセス・エラーãŒç™ºç”Ÿã—ãŸå?å?
307 */
308 public String[] getValues() throws SQLException {
309 final String[] vals = new String[clmSize];
310
311 for( int i=0; i<clmSize; i++ ) {
312 vals[i] = getValue( i );
313 }
314
315 return vals ;
316 }
317
318 /**
319 * タイプã«å¿œã˜ã¦å¤‰æ›ã•れãŸã?Numberオブジェクトを返ã—ã¾ã™ã?
320 *
321 * æ¡ä»¶ã«å½“ã¦ã¯ã¾ã‚‰ãªã??åˆã?ã€null ã‚’è¿”ã—ã¾ã™ã?
322 * org.opengion.hayabusa.io.HybsJDBCCategoryDataset2 ã‹ã‚‰ç§»å‹•ã—ã¦ãã¾ã—ãŸã€?
323 * ã“れã¯ã€æ¤œç´¢çµæžœã‚’グラフ化ã™ã‚‹ç‚ºã® 値をå–å¾—ã™ã‚‹ç‚ºã®ãƒ¡ã‚½ãƒ?ƒ‰ã§ã™ã?ã§ã€?
324 * 数値ã«å¤‰æ›ã§ããªã??åˆã?ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã?
325 *
326 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?: org.opengion.hayabusa.db.DBUtil#getNumber( int , Object ) ã‹ã‚‰ç§»å‹?
327 *
328 * @param clmNo カラãƒ?•ªå· (0ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1ã¾ã§ã®æ•°å?
329 * @return Numberオブジェクãƒ?æ¡ä»¶ã«å½“ã¦ã¯ã¾ã‚‰ãªã??åˆã?ã€null)
330 * @see java.sql.Types
331 * @throws java.sql.SQLException ãƒ??タベã?ス・アクセス・エラーãŒç™ºç”Ÿã—ãŸå?å?
332 * @throws RuntimeException æ•°å—変æ›ã§ããªã‹ã£ãŸå?åˆã?
333 */
334 public Number getNumber( final int clmNo ) throws SQLException {
335 final Object obj = resultSet.getObject( clmNo+1 );
336 Number value = null;
337
338 switch( type[clmNo] ) {
339 case Types.TINYINT:
340 case Types.SMALLINT:
341 case Types.INTEGER:
342 case Types.BIGINT:
343 case Types.FLOAT:
344 case Types.DOUBLE:
345 case Types.DECIMAL:
346 case Types.NUMERIC:
347 case Types.REAL: {
348 value = (Number)obj;
349 break;
350 }
351 case Types.DATE:
352 case Types.TIME: {
353 value = Long.valueOf( ((Date)obj).getTime() );
354 break;
355 }
356 // 5.6.2.1 (2013/03/08) Types.DATE 㨠Types.TIMESTAMP ã§å‡¦ç?‚’åˆ?‘ã¾ã™ã?
357 case Types.TIMESTAMP: {
358 value = Long.valueOf( ((Timestamp)obj).getTime() );
359 break;
360 }
361 case Types.CHAR:
362 case Types.VARCHAR:
363 case Types.LONGVARCHAR: {
364 final String str = (String)obj;
365 try {
366 value = Double.valueOf(str);
367 }
368 catch (NumberFormatException ex) {
369 final String errMsg = "æ•°å—変æ›ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚in=" + str
370 + CR + ex.getMessage() ;
371 throw new RuntimeException( errMsg,ex );
372 // suppress (value defaults to null)
373 }
374 break;
375 }
376 default:
377 // not a value, can't use it (defaults to null)
378 break;
379 }
380
381 return value;
382 }
383
384 /**
385 * カラãƒ??タイプを表ç¾ã™ã‚‹æ–?—å?値を返ã—ã¾ã™ã?
386 *
387 * ã“ã?æ–?—å?を用ã?¦ã€CCSファイルã§ã‚¿ã‚¤ãƒ—ã”ã¨ã®è¡¨ç¤ºæ–¹æ³•ã‚’
388 * æŒ?®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã?
389 * ç¾æ™‚点ã§ã¯ã€VARCHAR2,LONG,NUMBER,DATE,CLOB,NONE ã®ã©ã‚Œã‹ã«ã‚ã¦ã¯ã‚ã¾ã™ã?
390 *
391 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?: org.opengion.hayabusa.db.DBUtil#type2ClassName( int ) ã‹ã‚‰ç§»å‹?
392 *
393 * @param clmNo カラãƒ?•ªå· (0ã‹ã‚‰å§‹ã¾ã‚Šã?カラãƒ?•°-1ã¾ã§ã®æ•°å?
394 * @return カラãƒ??タイプを表ç¾ã™ã‚‹æ–?—å?値
395 * @see java.sql.Types
396 */
397 public String getClassName( final int clmNo ) {
398 final String rtn ;
399
400 switch( type[clmNo] ) {
401 case Types.CHAR:
402 case Types.VARCHAR:
403 case Types.BIT:
404 rtn = "VARCHAR2"; break;
405 case Types.LONGVARCHAR:
406 rtn = "LONG"; break;
407 case Types.TINYINT:
408 case Types.SMALLINT:
409 case Types.INTEGER:
410 case Types.NUMERIC:
411 case Types.BIGINT:
412 case Types.FLOAT:
413 case Types.DOUBLE:
414 case Types.REAL:
415 case Types.DECIMAL:
416 rtn = "NUMBER"; break;
417 case Types.DATE:
418 case Types.TIME:
419 case Types.TIMESTAMP:
420 rtn = "DATE"; break;
421 case Types.CLOB:
422 rtn = "CLOB"; break;
423 default:
424 rtn = "NONE"; break;
425 }
426
427 return rtn;
428 }
429
430 /**
431 * Clob オブジェクトã‹ã‚‰æ–‡å—å?ã‚’å–りå?ã—ã¾ã™ã?
432 *
433 * @og.rev 6.0.4.0 (2014/11/28) æ–°è¦ä½œæ?: org.opengion.hayabusa.db.DBUtil#getClobData( Clob ) ã‹ã‚‰ç§»å‹?
434 *
435 * @param clobData Clobオブジェク�
436 * @return Clobオブジェクトã‹ã‚‰å–りå?ã—ãŸæ–?—å?
437 * @throws SQLException ãƒ??タベã?スアクセスエラー
438 * @throws RuntimeException 入出力エラーãŒç™ºç”Ÿã—ãŸå?å?
439 * @og.rtnNotNull
440 */
441 private String getClobData( final Clob clobData ) throws SQLException {
442 if( clobData == null ) { return ""; }
443
444 final StringBuilder buf = new StringBuilder( 10000 );
445
446 Reader reader = null;
447 try {
448 reader = clobData.getCharacterStream();
449 final char[] ch = new char[10000];
450 int len ;
451 while( (len = reader.read( ch )) >= 0 ) {
452 buf.append( ch,0,len );
453 }
454 }
455 catch( IOException ex ) {
456 final String errMsg = "CLOBãƒ??ã‚¿ã®èªã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€?
457 + ex.getMessage() ;
458 throw new RuntimeException( errMsg,ex );
459 }
460 finally {
461 Closer.ioClose( reader );
462 }
463 return buf.toString();
464 }
465 }