java.lang.ClassCastException:无法在tableau中将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);
}
越来越例外:java.lang.ClassCastException:无法在tableau中将java.lang.String强制转换为java.lang.Integer?
异常在线程 “主要” java.lang.ClassCastException: java.lang.String中不能转换为java.lang.Integer中的 TableauData.main(TableauData.java :99)
如何解决这个问题?
答
您可以检查,如果rowData.get(j)
是整数,然后使用Integer.parseInt(rowData.get(j))
代替(Integer) rowData.get(j)
答
您正在尝试重新输入字符串到整数的错误的方式。您应该使用Integer.valueof(rowData.get(j))
或者你可以使用
Integer.parseInt()
由于瓦迪姆Beskrovnov建议。这取决于您是否要将Integer用作对象或原始数据类型。
如果colType是int,那么我使用setInteger方法设置它,为什么rowData.get(j)被视为字符串 – slssv
因为在第二个循环中不更新'colType = rsmds.getColumnTypeName(i);'。 'colType'总是等于结果集中的最后一个元素(可能是字符串类型) –
它工作正常!很大的帮助 – slssv