Java-SQL: Unterschied zwischen den Versionen

Aus SibiWiki
Zur Navigation springen Zur Suche springen
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>+ pDarsteller + </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());
   }
}

Datenbankmodell

Datenbank-Modell-Videodatenbank.png.