Ответ
Данные извлекаются с помощью цепочки JDBC: Connection -> Statement -> ResultSet. Основной паттерн — использование try-with-resources для гарантированного закрытия ресурсов.
Пример выполнения SELECT-запроса:
String url = "jdbc:postgresql://localhost:5432/mydb";
String user = "user";
String password = "pass";
String sql = "SELECT id, name, email FROM users WHERE active = true";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery()) {
// Итерация по строкам результата
while (rs.next()) {
// Извлечение данных по имени столбца (рекомендуется) или индексу
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
System.out.printf("ID: %d, Name: %s, Email: %s%n", id, name, email);
}
} catch (SQLException e) {
e.printStackTrace(); // В реальном приложении используйте логирование
}
Ключевые моменты:
ResultSet— курсор, указывающий на текущую строку данных.rs.next()— перемещает курсор к следующей строке. Возвращаетfalse, когда строк больше нет.- Методы
getXxx()(getInt,getStringи т.д.) извлекают значение из текущей строки. PreparedStatementпредпочтительнееStatement, так как предотвращает SQL-инъекции и кэшируется.
Для получения метаданных (названия, типы столбцов) используйте ResultSetMetaData:
ResultSetMetaData meta = rs.getMetaData();
int columnCount = meta.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
System.out.println("Column " + i + ": " + meta.getColumnName(i));
}