Как получить данные из базы данных с помощью JDBC?

«Как получить данные из базы данных с помощью JDBC?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Данные извлекаются с помощью цепочки 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(); // В реальном приложении используйте логирование
}

Ключевые моменты:

  1. ResultSet — курсор, указывающий на текущую строку данных.
  2. rs.next() — перемещает курсор к следующей строке. Возвращает false, когда строк больше нет.
  3. Методы getXxx() (getInt, getString и т.д.) извлекают значение из текущей строки.
  4. 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));
}