Datenbankabfragen (Java): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (Änderungen)
K
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
 
Um in Java mit Datenbanken zu arbeiten muss vorher die [[Datenbankverbindung_(Java)|Verbindung]] zu der [[Datenbank]] hergestellt werden.  
 
Um in Java mit Datenbanken zu arbeiten muss vorher die [[Datenbankverbindung_(Java)|Verbindung]] zu der [[Datenbank]] hergestellt werden.  
  
Mit diesem Connection Objekt werden dann alle weiteren Operationen ausgeführt.
+
Mit diesem {{JAPI|Connection}}-Objekt werden dann alle weiteren Operationen ausgeführt.
  
 
=Abfragen=
 
=Abfragen=
Um einfache Abfragen aus zuführen muss man sich ein Statement aus der Verbindung erzeugen lassen, dies geschied mit:
+
Um einfache Abfragen aus zuführen, muss man sich ein {{JAPI|Statement}} aus der Verbindung erzeugen lassen, dies geschied mit:
<code=java>
+
<syntaxhighlight lang="java">
 
Statement stmt = con.createStatement(); //con ist ein java.sql.Connection Objekt
 
Statement stmt = con.createStatement(); //con ist ein java.sql.Connection Objekt
</code=java>
+
</syntaxhighlight>
  
Über dieses Statement lassen sich jetzt alle weiteren Abfragen ausführen, zu beachten ist jedoch das immer nur eine Abfrage gleichzeitig von dem Statement gleichzeitig bearbeitet werden kann. Sollen mehrere Abfragen gleichzeitig bearbeitet werden muss man sich verschiedene Statements erzeugen.
+
Über dieses Statement lassen sich jetzt alle weiteren Abfragen ausführen, zu beachten ist jedoch das immer nur eine Abfrage gleichzeitig von dem Statement gleichzeitig bearbeitet werden kann. Sollen mehrere Abfragen gleichzeitig bearbeitet werden, muss man sich verschiedene Statements erzeugen.
  
Um eine Abfrage auszuführen wird jetzt <i>executeQuery</i> aufgerufen, dieses gibt ein [[ResultSet]] zurück, in diesem sind alle Ergebnisse der Abfrage vorhanden.
+
Um eine Abfrage auszuführen, wird jetzt ''executeQuery'' aufgerufen, dieses gibt ein [[ResultSet]] zurück, in diesem sind alle Ergebnisse der Abfrage vorhanden.
  
<code=java>
+
<syntaxhighlight lang="java">
 
ResultSet res = stmt.executeQuery("SELECT * FROM tabelle;");
 
ResultSet res = stmt.executeQuery("SELECT * FROM tabelle;");
</code=java>
+
</syntaxhighlight>
  
Das ResultSet kann man sich wie eine Tabelle vorstellen in dem alle Ergebnisse in Spalten und Zeilen eingetragen sind. Um durch das ResultSet zu laufen muss man immer die Methode <i>next</i> aufrufen, diese gibt <i>true</i> oder <i>false</i> zurück, jenachdem ob es eine weitere Zeile gibt. Die Methode <i>next</i> muss auch vor dem ersten Zugriff aufgerufen werden, so erfährt man auch ob es ein Ergebnis gibt. Um auf die einzelnen Spalten des Ergebnis zuzugreifen benutzt man die Methode, die den für einen passenden Wert zurück gibt und als Argument kann man den Spaltennamen oder die Position beginnent ab <b>1</b> benutzen.
+
Das {{JAPI|ResultSet}} kann man sich wie eine Tabelle vorstellen, in dem alle Ergebnisse in Spalten und Zeilen eingetragen sind. Um durch das ResultSet zu laufen, muss man immer die [[Methode]] <code>next()</code> aufrufen, diese gibt <code>true</code> oder <code>false</code> zurück, je nach dem, ob es eine weitere Zeile gibt. Die Methode <code>next()</code> muss auch vor dem ersten Zugriff aufgerufen werden, so erfährt man auch ob es ein Ergebnis gibt. Um auf die einzelnen Spalten des Ergebnis zuzugreifen, benutzt man die Methode, die den für einen passenden Wert zurück gibt und als Argument kann man den Spaltennamen oder die Position beginnend mit '''1''' benutzen.
<code=java>
+
<syntaxhighlight lang="java">
 
while(res.next())
 
while(res.next())
 
{
 
{
Zeile 24: Zeile 24:
 
   System.out.println(res.getString(1));
 
   System.out.println(res.getString(1));
 
}
 
}
</code=java>
+
</syntaxhighlight>
Am Ende der Abfrage sollte man das Statement Objekt nicht schließen da so auch die Verbindung geschlossen wird, dies kann Vor- und Nachteile haben.
+
Am Ende der Abfrage sollte man das Statement Objekt nicht schließen, da so auch die Verbindung geschlossen wird, dies kann Vor- und Nachteile haben.
  
 
=Änderungen=
 
=Änderungen=
Um Änderungen an den Daten vorzunehmen, muss wie bei den Abfragen ein Statement Objekt erzeugen. Anschließend kann über dieses Statement mit <i>executeUpdate</i> die Anweisung ausgeführt werden. Als Rückgabewert wird dabei die Anzahl der betroffenen Zeilen zurückgegeben.
+
Um Änderungen an den Daten vorzunehmen, muss wie bei den Abfragen ein Statement Objekt erzeugen. Anschließend kann über dieses Statement mit <code>executeUpdate()</code> die Anweisung ausgeführt werden. Als Rückgabewert wird dabei die Anzahl der betroffenen Zeilen zurückgegeben.
<code=java>
+
<syntaxhighlight lang="java">
 
Statement stmt = con.createStatement();
 
Statement stmt = con.createStatement();
 
int ret = stmt.executeUpdate("DELETE FROM tabelle;");
 
int ret = stmt.executeUpdate("DELETE FROM tabelle;");
</code=java>
+
</syntaxhighlight>
Mit <i>executeUpdate</i> sollten alle Arten von Abfragen ausgeführt werden die keine Ergebnismenge zurückgeben.
+
Mit <code>executeUpdate</code> sollten alle Arten von Abfragen ausgeführt werden, die keine Ergebnismenge zurückgeben.
  
 
[[Kategorie:Java]]
 
[[Kategorie:Java]]

Aktuelle Version vom 24. März 2018, 15:20 Uhr

Um in Java mit Datenbanken zu arbeiten muss vorher die Verbindung zu der Datenbank hergestellt werden.

Mit diesem Connection-Objekt werden dann alle weiteren Operationen ausgeführt.

Abfragen

Um einfache Abfragen aus zuführen, muss man sich ein Statement aus der Verbindung erzeugen lassen, dies geschied mit:

Statement stmt = con.createStatement(); //con ist ein java.sql.Connection Objekt

Über dieses Statement lassen sich jetzt alle weiteren Abfragen ausführen, zu beachten ist jedoch das immer nur eine Abfrage gleichzeitig von dem Statement gleichzeitig bearbeitet werden kann. Sollen mehrere Abfragen gleichzeitig bearbeitet werden, muss man sich verschiedene Statements erzeugen.

Um eine Abfrage auszuführen, wird jetzt executeQuery aufgerufen, dieses gibt ein ResultSet zurück, in diesem sind alle Ergebnisse der Abfrage vorhanden.

ResultSet res = stmt.executeQuery("SELECT * FROM tabelle;");

Das ResultSet kann man sich wie eine Tabelle vorstellen, in dem alle Ergebnisse in Spalten und Zeilen eingetragen sind. Um durch das ResultSet zu laufen, muss man immer die Methode next() aufrufen, diese gibt true oder false zurück, je nach dem, ob es eine weitere Zeile gibt. Die Methode next() muss auch vor dem ersten Zugriff aufgerufen werden, so erfährt man auch ob es ein Ergebnis gibt. Um auf die einzelnen Spalten des Ergebnis zuzugreifen, benutzt man die Methode, die den für einen passenden Wert zurück gibt und als Argument kann man den Spaltennamen oder die Position beginnend mit 1 benutzen.

while(res.next())
{
  System.out.println(res.getString("spalte1"));
  System.out.println(res.getString(1));
}

Am Ende der Abfrage sollte man das Statement Objekt nicht schließen, da so auch die Verbindung geschlossen wird, dies kann Vor- und Nachteile haben.

Änderungen

Um Änderungen an den Daten vorzunehmen, muss wie bei den Abfragen ein Statement Objekt erzeugen. Anschließend kann über dieses Statement mit executeUpdate() die Anweisung ausgeführt werden. Als Rückgabewert wird dabei die Anzahl der betroffenen Zeilen zurückgegeben.

Statement stmt = con.createStatement();
int ret = stmt.executeUpdate("DELETE FROM tabelle;");

Mit executeUpdate sollten alle Arten von Abfragen ausgeführt werden, die keine Ergebnismenge zurückgeben.