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 }