java.lang.ClassCastException:java.lang.String无法强制转换为tableau中的java.lang.Integer?

时间:2017-07-18 11:59:55

标签: java list tableau

     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);
         }

获得例外:

  

线程“main”中的异常java.lang.ClassCastException:   java.lang.String无法强制转换为java.lang.Integer at   TableauData.main(TableauData.java:99)

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您正试图以错误的方式重新键入String to Integer。您应该使用Integer.valueof(rowData.get(j))

或者您可以使用

Integer.parseInt()

正如Vadim Beskrovnov所说。这取决于您是否希望将Integer用作对象或基本数据类型。