2017-07-18 4 views
0
 List<Object> rowData = new ArrayList<Object>(); 
    Resultset rs = selectFromRemoteTable(conn, sourceTableOrQuery); 
    ResultSetMetaData rsmds = rs.getMetaData(); 
int columnCount = rsmds.getColumnCount(); 
    while(rs.next()){ 
     for (int i = 1; i <= columnCount; i++) { 
      colType = rsmds.getColumnTypeName(i); 
      if(colType.equalsIgnoreCase("INT")){ 
       rowData.add((Integer)rs.getInt(i)); 
       continue; 
      } 
      if(colType.startsWith("varchar")){ 
       rowData.add((String)rs.getString(i)); 
      continue; 
    } 
     } 
    for (int i = 0; i < tableRows; i++) { 
      Row row = new Row(tableDef); 
      for (int j = 0; j < rowData.size(); j++) { 
      if(colType.equalsIgnoreCase("INT")){ 
       row.setInteger(j, (Integer) rowData.get(j));// getting class cast exception here 
        continue; 
      } 
      if(colType.startsWith("varchar")){ 

        row.setCharString(j, (String) rowData.get(j)); 

      continue; 
      } 
      } 
      //add the row to the table 
      table.insert(row); 
     } 

なっ例外:java.lang.ClassCastException:java.lang.Stringはtableauのjava.lang.Integerにキャストできませんか?

スレッドの例外 "メイン" とjava.lang.ClassCastException:java.lang.Stringでは TableauData.mainではjava.lang.Integerにキャストすることはできません (TableauData.java :99)

これを解決するには?

答えて

2

rowData.get(j)が整数である場合は、その後、あなたは間違った方法で文字列を整数に再入力しようとしている代わりに(Integer) rowData.get(j)

+0

colTypeがintの場合、setIntegerメソッドを使用して設定しています。なぜなら、2番目のループで 'colType = rsmds.getColumnTypeName(i); 'を更新しないので、rowData.get(j)は文字列 – slssv

+0

として扱われます。そして、 'colType'は常にresultetの最後の要素と同じです(おそらくString型です) –

+0

これはうまくいきました!大きな助け – slssv

0

Integer.parseInt(rowData.get(j))を使用し、確認することができます。あなたはInteger.valueof(rowData.get(j))

を使うべきかヴァディムBeskrovnovが示唆したように、あなたは

Integer.parseInt() 

を使用することができます。オブジェクトまたはプリミティブデータ型としてIntegerを使用するかどうかによって異なります。

関連する問題