Sobes.tech
Middle

Hoe is de klasse ResultSet in Java opgebouwd?

sobes.tech AI

Antwoord van AI

ResultSet is een interface in het pakket java.sql, dat de resultaten van het uitvoeren van een SQL-query vertegenwoordigt. Het biedt stapsgewijs toegang tot de gegevens (rij voor rij).

Belangrijke aspecten:

  • Cursor: ResultSet ondersteunt een cursor die wijst naar de huidige gegevensrij. Aanvankelijk staat de cursor vóór de eerste rij.
  • Navigatie: Om de cursor te verplaatsen, worden methoden zoals next(), previous(), first(), last() gebruikt. next() geeft true terug als de cursor succesvol naar de volgende rij is verplaatst, en false als het einde van het resultaat is bereikt.
  • Types: Er zijn verschillende types ResultSet met verschillende navigatie- en update-mogelijkheden:
    • TYPE_FORWARD_ONLY: De cursor beweegt alleen vooruit (meest efficiënt).
    • TYPE_SCROLL_INSENSITIVE: De cursor kan in elke richting bewegen, wijzigingen in de database worden niet weergegeven.
    • TYPE_SCROLL_SENSITIVE: De cursor kan in elke richting bewegen, wijzigingen in de database worden weergegeven (kan langzamer zijn).
  • Concurreren: Bepaalt of gegevens via ResultSet kunnen worden gewijzigd:
    • CONCUR_READ_ONLY: Alleen lezen.
    • CONCUR_UPDATABLE: Lezen en schrijven.
  • Gegevens ophalen: Gegevens uit de huidige rij worden opgehaald met methoden zoals get<Type>(), bijvoorbeeld getString(int columnIndex), getInt(String columnLabel), getDate(int columnIndex).
  • Sluiten: Het is belangrijk om ResultSet na gebruik te sluiten om bronnen vrij te maken, met de methode close(). Dit wordt meestal gedaan in een finally-blok of met try-with-resources.

Voorbeeld van gebruik:

// Er wordt aangenomen dat connection en statement al geïnitialiseerd zijn
try (ResultSet resultSet = statement.executeQuery("SELECT id, name FROM users")) {
    while (resultSet.next()) {
        int id = resultSet.getInt("id");
        String name = resultSet.getString("name");
        System.out.println("Gebruiker ID: " + id + ", Naam: " + name);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

ResultSet slaat niet alle gegevens gelijktijdig in het geheugen op, wat het efficiënt maakt bij werken met grote hoeveelheden data.