2017-07-18 86 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:无法在tableau中将java.lang.String强制转换为java.lang.Integer?

异常在线程 “主要” java.lang.ClassCastException: java.lang.String中不能转换为java.lang.Integer中的 TableauData.main(TableauData.java :99)

如何解决这个问题?

回答

2

您可以检查,如果rowData.get(j)是整数,然后使用Integer.parseInt(rowData.get(j))代替(Integer) rowData.get(j)

+0

如果colType是int,那么我使用setInteger方法设置它,为什么rowData.get(j)被视为字符串 – slssv

+0

因为在第二个循环中不更新'colType = rsmds.getColumnTypeName(i);'。 'colType'总是等于结果集中的最后一个元素(可能是字符串类型) –

+0

它工作正常!很大的帮助 – slssv

0

您正在尝试重新输入字符串到整数的错误的方式。您应该使用Integer.valueof(rowData.get(j))

或者你可以使用

Integer.parseInt() 

由于瓦迪姆Beskrovnov建议。这取决于您是否要将Integer用作对象或原始数据类型。

相关问题