java.lang.ClassCastException: java.lang.String нельзя преобразовать в java.lang.Integer в таблице?

     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 в TableauData.main(TableauData.java:99)

Как это решить?


person slssv    schedule 18.07.2017    source источник


Ответы (2)


Вы можете проверить, если rowData.get(j) является целым числом, тогда используйте Integer.parseInt(rowData.get(j)) вместо (Integer) rowData.get(j)

person Vadim Beskrovnov    schedule 18.07.2017
comment
если colType имеет значение int, то я устанавливаю его с помощью метода setInteger, почему rowData.get(j) обрабатывается как строка - person slssv; 18.07.2017
comment
Потому что вы не обновляете colType = rsmds.getColumnTypeName(i); во втором цикле. И colType всегда равно последнему элементу в наборе результатов (который, вероятно, имеет тип String) - person Vadim Beskrovnov; 18.07.2017

Вы пытаетесь неправильно преобразовать String в Integer. Вы должны использовать Integer.valueof(rowData.get(j))

Или вы можете использовать

Integer.parseInt()

Как предложил Вадим Бескровнов. Это зависит от того, хотите ли вы использовать Integer как объект или примитивный тип данных.

person František Jeřábek    schedule 18.07.2017