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:java.lang.Stringはtableauのjava.lang.Integerにキャストできませんか?
スレッドの例外 "メイン" とjava.lang.ClassCastException:java.lang.Stringでは TableauData.mainではjava.lang.Integerにキャストすることはできません (TableauData.java :99)
これを解決するには?
colTypeがintの場合、setIntegerメソッドを使用して設定しています。なぜなら、2番目のループで 'colType = rsmds.getColumnTypeName(i); 'を更新しないので、rowData.get(j)は文字列 – slssv
として扱われます。そして、 'colType'は常にresultetの最後の要素と同じです(おそらくString型です) –
これはうまくいきました!大きな助け – slssv