代码之家  ›  专栏  ›  技术社区  ›  slssv

java.lang.ClassCastException:java.lang.String不能在tableau中转换为java.lang.Integer?

  •  0
  • slssv  · 技术社区  · 7 年前
         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 main(TableauData.java:99)

    2 回复  |  直到 7 年前
        1
  •  2
  •   Vadim Beskrovnov    7 年前

    你可以检查,如果 rowData.get(j) Integer.parseInt(rowData.get(j)) 而不是 (Integer) rowData.get(j)

        2
  •  0
  •   FrantiÅ¡ek Jeřábek    7 年前

    Integer.valueof(rowData.get(j))

    或者你可以使用

    Integer.parseInt()
    

    正如瓦迪姆·贝斯克罗夫诺夫所建议的那样。这取决于您想使用整数作为对象还是基本数据类型。