Класс ResultSet
предоставляет геттеры, которые принимают индекс столбца (начиная с позиции 1), в дополнение к именованным геттерам, с которыми мы знакомы. Вы можете воспользоваться этим здесь:
XSSFRow row = spreadsheet.createRow(1);
XSSFCell cell;
// use ResultSetMetaData to fetch the column names
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int c=1; c <= columnCount; ++c) {
String name = rsmd.getColumnName(c);
cell = row.createCell(c);
cell.setCellValue(name);
}
int i = 2;
while (resultSet.next()) {
row = spreadsheet.createRow(i);
for (int c=1; c <= columnCount; ++c) {
cell = row.createCell(c);
cell.setCellValue(resultSet.getObject(c));
}
}
Примечания:
Если вы посмотрите на вызов XSSFCell#setCellValue()
, вы увидите, что я использую ResultSet#getObject
для получения значения. Причина этого в том, что мы априори не знаем, каким будет тип столбца в столбце базы данных. Я предполагаю, что setCellValue
может принять Object
в качестве ввода. Если нет, то вам придется использовать какую-то альтернативу, например, используя ResultSet#getString()
везде.