JDBC: Abfrage der Datenbank

Eine Datenbank abzufragen bedeutet, ihre Daten zu durchsuchen. Dies geschieht durch das Senden von SQL-Anweisungen an die Datenbank. Dazu benötigen Sie zunächst eine offene Datenbankverbindung. Sobald Sie eine offene Verbindung haben, müssen Sie ein Statement-Objekt erstellen, etwa so:

Statement statement = connection.createStatement();

Sobald Sie das Statement-Objekt erstellt haben, können Sie es verwenden, um SQL-Abfragen auszuführen, etwa so:

String sql = "select * from people";ResultSet result = statement.executeQuery(sql);

Wenn Sie eine SQL-Abfrage ausführen, erhalten Sie ein ResultSet-Objekt zurück. Die ResultSet enthält das Ergebnis Ihrer SQL-Abfrage. Das Ergebnis wird in Zeilen mit Spalten von Daten zurückgegeben. Sie iterieren die Zeilen des ResultSet wie folgt:

while(result.next()) { String name = result.getString("name"); long age = result.getLong ("age");}

Die Methode ResultSet.next() springt zur nächsten Zeile im ResultSet, wenn es noch weitere Zeilen gibt. Wenn es noch weitere Zeilen gibt, gibt sie true zurück. Wenn es keine weiteren Zeilen gibt, gibt sie false zurück.

Sie müssen next() mindestens einmal aufrufen, bevor Sie Daten lesen können. Vor dem ersten next()-Aufruf wird ResultSet vor der ersten Zeile positioniert.

Sie können Spaltendaten für die aktuelle Zeile erhalten, indem Sie einige der getXXX()-Methoden aufrufen, wobei XXX ein primitiver Datentyp ist. Zum Beispiel:

 result.getString ("columnName"); result.getLong ("columnName"); result.getInt ("columnName"); result.getDouble ("columnName"); result.getBigDecimal("columnName"); etc.

Der Name der Spalte, deren Wert abgerufen werden soll, wird als Parameter an einen dieser getXXX()-Methodenaufrufe übergeben.

Sie können stattdessen auch einen Index der Spalte übergeben, etwa so:

 result.getString (1); result.getLong (2); result.getInt (3); result.getDouble (4); result.getBigDecimal(5); etc.

Damit das funktioniert, müssen Sie wissen, welchen Index eine bestimmte Spalte in der ResultSet hat. Den Index einer bestimmten Spalte erhält man, indem man die Methode ResultSet.findColumn() aufruft, etwa so:

 int columnIndex = result.findColumn("columnName");

Wenn man große Mengen von Zeilen iteriert, kann es schneller sein, die Spalten über ihren Index zu referenzieren als über ihren Namen.

Wenn man mit der Iteration der ResultSet fertig ist, muss man sowohl das ResultSet– als auch das Statement-Objekt schließen, das es erstellt hat (wenn man damit fertig ist). Dies geschieht durch den Aufruf ihrer close()-Methoden, etwa so:

result.close();statement.close();

Natürlich sollten Sie diese Methoden innerhalb eines finally-Blocks aufrufen, um sicherzustellen, dass sie auch dann aufgerufen werden, wenn während der ResultSet-Iteration eine Ausnahme auftritt.

Vollständiges Beispiel

Hier ist ein vollständiges Abfragecode-Beispiel:

Statement statement = connection.createStatement();String sql = "select * from people";ResultSet result = statement.executeQuery(sql);while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age);}result.close();statement.close();

Und hier ist das Beispiel noch einmal, mit hinzugefügten try-finally-Blöcken. Beachten Sie, dass ich die catch-Blöcke weggelassen habe, um das Beispiel kürzer zu machen.

Statement statement = null;try{ statement = connection.createStatement(); ResultSet result = null; try{ String sql = "select * from people"; ResultSet result = statement.executeQuery(sql); while(result.next()) { String name = result.getString("name"); long age = result.getLong("age"); System.out.println(name); System.out.println(age); } } finally { if(result != null) result.close(); }} finally { if(statement != null) statement.close();}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.