2016-11-23 9 views
0

javaのカラムのタイプを取得したいと思います。
私はそのように実行します。getColumnTypeが数値型で機能しないのはなぜですか?

ResultSetMetaData rsmd = rs.getMetaData(); 
    int type = 0; 

    for (int i = 0; i < rsmd.getColumnCount(); i++) { 
     type = rsmd.getColumnType(i); 

     if (type == Types.VARCHAR) { 
      System.out.println("str"); 
     } else if (type == Types.INTEGER){ 
      System.out.println("int"); 
     } 

    } 

このコードは、文字列のために動作しますが、それはSQLでnumberタイプには使用できません。
the list of typesにも数字タイプはありませんか? どうすれば問題を解決できますか?

EDIT

Types.NUMERICはswitch文を使って、

+0

私は間違っていない場合は、[ 'Types.NUMERIC'](http://docs.oracle.com/javase/8/docs/api/java/sql/Types.html#NUMERIC)がありますあなたが探しているもの。 – Mureinik

+0

どのDBMSおよびJDBCドライバを使用していますか?そして、データベースの型定義は何ですか? –

+0

'Types.NUMERIC'はif条件では機能しませんが、正しい答えです – mafioso

答えて

1

のResultSetMetaDataの列インデックスが1から始まる、0ベースではない正しい答えです。 SQLでINTEGERとして宣言された列に対して返されるJDBCタイプは、RDBMSによって異なる場合があります。

ResultSetMetaData rsmd = rs.getMetaData(); 
int type = 0; 

for (int i = 1; i <= rsmd.getColumnCount(); i++) { 
    type = rsmd.getColumnType(i); 
    switch (type) { 
     case Types.SMALLINT: 
      break; 
     case Types.INTEGER: 
      break; 
     case Types.BIGINT: 
      break; 
     case Types.DECIMAL: 
      break; 
     case Types.NUMERIC: 
      break; 
     case Types.FLOAT: 
      break; 
     case Types.DOUBLE: 
      break; 
     default: 
    } 
} 
+0

ありがとう、今は動作します! 'Types.NUMERIC'がif条件では動作しませんが、スイッチではなぜ動作するのか考えていますか? – mafioso

+0

ほとんどのデータベースは、DECIMALにSQL DECIMALとINTEGER、SMALLINTまたはBIGINTを通知します。しかし、OracleはNUMBER、INTEGER、SMALLINTまたはBIGINTで定義された列をNUMERICに通知します。多分それが問題です。 –

関連する問題