java.lang.Classcastexception-Fehler: java.lang.String nicht umgewandelt werden, um java.lang.Integer in 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);
}
erste Ausnahme :
Exception in thread "main" java.lang.Classcastexception-Fehler:
java.lang.String nicht umgewandelt werden, um java.lang.Ganze Zahl in
TableauData.main(TableauData.java:99)
Wie man dieses Problem lösen?
InformationsquelleAutor slssv | 2017-07-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie überprüfen, wenn
rowData.get(j)
ist Integer, dann verwenden SieInteger.parseInt(rowData.get(j))
statt(Integer) rowData.get(j)
colType = rsmds.getColumnTypeName(i);
im zweiten Schleife. UndcolType
immer gleich dem letzten element in der Ergebnismenge(das hat wahrscheinlich String-Typ)Sie versuchen, erneut ein String zu Integer in einen falschen Weg. Sollten Sie verwenden
Integer.valueof(rowData.get(j))
Oder verwenden Sie
Als Vadim Beskrovnov vorgeschlagen. Es hängt davon ab, ob Sie möchten, verwenden Sie Integer als Objekt oder primitiven Datentyp.