Java-SQL: Unterschied zwischen den Versionen
Zeile 13: | Zeile 13: | ||
=Beispiel= | =Beispiel= | ||
==Vorüberlegungen== | |||
Das folgende Beispiel bezieht sich auf die Video-Datenbank, die auch im Unterricht häufig zum Einsatz kommt. <br/> | |||
Das Datenbank-Modell kann man [[Java-SQL#Datenbankmodell|unten auf dieser Seite]] anschauen. | |||
Es soll jetzt eine Java-Methode entwickelt werden, die 10 Filme zu einem Schauspieler zurückgibt. Den Schauspieler soll man als Parameter angeben können. | |||
Die '''Datenbank-Abfrage''', die das ermöglicht, ist die folgende - hier aufgezeigt für den Schauspieler "Depp": | |||
==Java-Code== | |||
<code> | <code> | ||
'''public class DatenbankTest {''' | '''public class DatenbankTest {''' | ||
Zeile 25: | Zeile 35: | ||
} | } | ||
'''public List<String> zehnFilmeMit(String pDarsteller){''' | '''public List<String> zehnFilmeMit(String <font color='red'>pDarsteller</font>){''' | ||
List<String> ergebnis = new List<String>(); | List<String> ergebnis = new List<String>(); | ||
Zeile 31: | Zeile 41: | ||
<font color='blue'><b>// Der Paramenter pDarsteller wird eingebaut - man muss auf die Leerzeichen achten!!</b></font> | <font color='blue'><b>// Der Paramenter pDarsteller wird eingebaut - man muss auf die Leerzeichen achten!!</b></font> | ||
String sqlStatement = | String sqlStatement = | ||
" SELECT h.name AS hauptdarstellername, f.name AS filmname, f.oscars AS oscars "+ | " <font color='grey'>SELECT h.name AS hauptdarstellername, f.name AS filmname, f.oscars AS oscars</font> "+ | ||
" FROM film f, film_has_hauptdarsteller fh, hauptdarsteller h "+ | " <font color='grey'>FROM film f, film_has_hauptdarsteller fh, hauptdarsteller h</font> "+ | ||
" WHERE f.id = fh.film_id "+ | " <font color='grey'>WHERE f.id = fh.film_id</font> "+ | ||
" AND h.id = fh.hauptdarsteller_id "+ | " <font color='grey'>AND h.id = fh.hauptdarsteller_id</font> "+ | ||
" AND h.name LIKE '%" <b> | " <font color='grey'>AND h.name LIKE '%</font>" +<font color='red'><b> pDarsteller </b></font>+ "<font color='grey'>%'</font> "+ | ||
" LIMIT 10 "; | " <font color='grey'>LIMIT 10</font> "; | ||
<font color='blue'><b>// Zur Kontrolle das SQL-Statement ausgeben</b></font> | <font color='blue'><b>// Zur Kontrolle das SQL-Statement ausgeben</b></font> | ||
System.out.println(sqlStatement); | System.out.println(sqlStatement); | ||
Zeile 87: | Zeile 97: | ||
} | } | ||
</code> | </code> | ||
==Datenbankmodell== | |||
[[Datei:Datenbank-Modell-Videodatenbank.png]]. |
Version vom 14. Januar 2018, 14:58 Uhr
Auf dieser Seite wird erklärt, wie man aus Java heraus SQL-Abfragen auf einer Datenbank ausführen kann.
Einschränkung der Allgemeingültigkeit dieser Seite:
Hier werden die Klassen DatabaseConnector.java
und QueryResult.java
verwendet, deren Schnittstelle vom Zentralabitur NRW vorgegeben ist
Schnittstelle des Zentralabitur
Datei:DatabaseConnector QueryResult Abi 2018.pdf
Beispiel
Vorüberlegungen
Das folgende Beispiel bezieht sich auf die Video-Datenbank, die auch im Unterricht häufig zum Einsatz kommt.
Das Datenbank-Modell kann man unten auf dieser Seite anschauen.
Es soll jetzt eine Java-Methode entwickelt werden, die 10 Filme zu einem Schauspieler zurückgibt. Den Schauspieler soll man als Parameter angeben können.
Die Datenbank-Abfrage, die das ermöglicht, ist die folgende - hier aufgezeigt für den Schauspieler "Depp":
Java-Code
public class DatenbankTest {
private DatabaseConnector connector;
public DatenbankTest() {
// Die Verbindung zur Datenbank aufbauen
// ip port database user password
connector = new DatabaseConnector("localhost", 3306, "demo", "admin", "geheim");
String errorMessage = connector.getErrorMessage();
if(errorMessage != null) System.err.println(errorMessage);
}
public List<String> zehnFilmeMit(String pDarsteller){
List<String> ergebnis = new List<String>();
//Das SQL-Statement zusammenbauen
// Der Paramenter pDarsteller wird eingebaut - man muss auf die Leerzeichen achten!!
String sqlStatement =
" SELECT h.name AS hauptdarstellername, f.name AS filmname, f.oscars AS oscars "+
" FROM film f, film_has_hauptdarsteller fh, hauptdarsteller h "+
" WHERE f.id = fh.film_id "+
" AND h.id = fh.hauptdarsteller_id "+
" AND h.name LIKE '%" + pDarsteller + "%' "+
" LIMIT 10 ";
// Zur Kontrolle das SQL-Statement ausgeben
System.out.println(sqlStatement);
// Das SQL-Statement ausführen
connector.executeStatement(sqlStatement);
// Abbruchbedingung für einen Error
String errorMessage = connector.getErrorMessage();
if(errorMessage != null)
{
// Die Fehlernachricht ausgeben
System.err.println(errorMessage);
return null;
}
// Das Ergebnis der Datenbankabfrae ermitteln:
// Man erhält ein Objekt vom Typ QueryResult
QueryResult queryResult = connector.getCurrentQueryResult();
// Die Daten aus QueryResult auslesen
// Die Daten werden als 2-dim. Array wiedergegeben:
// 1. Dimension: Zeile des Ergebnisses
// 2. Dimension: Spalte des Ergebnisses (in der Reihenfolge wie im SQL-Statement
String[][] data = queryResult.getData();
// Die Zeilen durchlaufen
for (int i = 0; i < data.length; i++) {
// Die einzelnen Spalten einer Zeile abfragen
String hauptdarsteller = data[i][0];
String filmName = data[i][1];
// Daten sind grundsätzlich vom Typ String!
String oscarsString = data[i][2];
// in int konvertieren
int oscars = Integer.parseInt(oscarsString);
// alles in einen String zusammenfuegen...
String zeile = hauptdarsteller+": "+filmName+" ("+oscars+" Oscars)";
System.out.println(zeile);
// ... und an die Liste ergebnis anhaengen
ergebnis.append(zeile);
}
return ergebnis;
}
public static void main(String[] args) {
new GUI(new DatenbankTest());
}
}