<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://sibiwiki.de/wiki/index.php?action=history&amp;feed=atom&amp;title=Java-SQL</id>
	<title>Java-SQL - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://sibiwiki.de/wiki/index.php?action=history&amp;feed=atom&amp;title=Java-SQL"/>
	<link rel="alternate" type="text/html" href="https://sibiwiki.de/wiki/index.php?title=Java-SQL&amp;action=history"/>
	<updated>2026-11-11T09:06:16Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in sibiwiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://sibiwiki.de/wiki/index.php?title=Java-SQL&amp;diff=147&amp;oldid=prev</id>
		<title>Akaibel: 1 Version importiert</title>
		<link rel="alternate" type="text/html" href="https://sibiwiki.de/wiki/index.php?title=Java-SQL&amp;diff=147&amp;oldid=prev"/>
		<updated>2026-10-27T17:44:45Z</updated>

		<summary type="html">&lt;p&gt;1 Version importiert&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 27. Oktober 2026, 17:44 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Akaibel</name></author>
	</entry>
	<entry>
		<id>https://sibiwiki.de/wiki/index.php?title=Java-SQL&amp;diff=146&amp;oldid=prev</id>
		<title>sibiwikialt&gt;Akaibel: /* Java-Code */</title>
		<link rel="alternate" type="text/html" href="https://sibiwiki.de/wiki/index.php?title=Java-SQL&amp;diff=146&amp;oldid=prev"/>
		<updated>2026-09-28T15:47:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Java-Code&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:Datenbanken]]&lt;br /&gt;
[[Kategorie:Informatik-Abitur]]&lt;br /&gt;
[[Kategorie:Informatik]]&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite wird erklärt, wie man aus Java heraus SQL-Abfragen auf einer Datenbank ausführen kann.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Einschränkung der Allgemeingültigkeit dieser Seite:&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Hier werden die Klassen &amp;lt;code&amp;gt;DatabaseConnector.java&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;QueryResult.java&amp;lt;/code&amp;gt; verwendet, deren Schnittstelle vom Zentralabitur NRW vorgegeben ist&lt;br /&gt;
&lt;br /&gt;
=Erklärvideo=&lt;br /&gt;
&lt;br /&gt;
[https://youtu.be/2wwpp27AM3s Mit Java auf Datenbanken zugreifen (gemäß Schnittstelle NRW-Zentralabitur)]&lt;br /&gt;
&lt;br /&gt;
=Fachbegriffe=&lt;br /&gt;
SQL-Abfrage, Parameter, QueryResult, 2-dimensionales Array, Zeile und Spalte(im 2-dim. Array)&lt;br /&gt;
&lt;br /&gt;
=Schnittstelle des Zentralabitur=&lt;br /&gt;
&lt;br /&gt;
[[Datei:DatabaseConnector_QueryResult_Abi_2018.pdf]]&lt;br /&gt;
&lt;br /&gt;
=Beispiel=&lt;br /&gt;
&lt;br /&gt;
==Vorüberlegungen==&lt;br /&gt;
Das folgende Beispiel bezieht sich auf die Datenbank Schule, die auch im Unterricht häufig zum Einsatz kommt. &amp;lt;br/&amp;gt;&lt;br /&gt;
Das Datenbank-Modell und alle Daten der Datenbank finden sich hier:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Datenbank#Beispieldatenbank_Schule|Beispieldatenbank Schule]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es soll jetzt eine Java-Methode entwickelt werden, die alle Schüler einer Klasse als eine Liste vom Inhaltstyp &amp;lt;code&amp;gt;Person&amp;lt;/code&amp;gt; zurückgibt.&amp;lt;br/&amp;gt;Die Klasse soll man als Parameter &amp;lt;code&amp;gt;pKlasse&amp;lt;/code&amp;gt; übergeben können.&lt;br /&gt;
&lt;br /&gt;
D.h. die Methodenkopf soll wie folgt aussehen:&lt;br /&gt;
 &amp;lt;code&amp;gt;&lt;br /&gt;
   public List&amp;lt;Person&amp;gt; schuelerDerKlasse(String pKlasse)&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;(Die Klasse Person hat einen Konstruktor &amp;lt;code&amp;gt;public Person(String pName, String pVorname)&amp;lt;/code&amp;gt; - mehr muss man über die Klasse Person hier nicht wissen.)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Datenbank-Abfrage==&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Datenbank-Abfrage&amp;#039;&amp;#039;&amp;#039;, die das ermöglicht, ist die folgende - hier aufgezeigt am Beispiel der 8B:&lt;br /&gt;
 &amp;lt;code&amp;gt;&lt;br /&gt;
  SELECT s.name, s.vorname&lt;br /&gt;
  FROM schueler s JOIN klasse k&lt;br /&gt;
  ON s.klasse_id = k.id&lt;br /&gt;
  WHERE k.name = &amp;#039;&amp;lt;font color=&amp;#039;red&amp;#039;&amp;gt;8B&amp;lt;/font&amp;gt;&amp;#039;&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Datenbank-Abfrage sollte man vorab entwickelt und getestet haben.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Es ist besser, wenn man für die SQL-Abfrage &amp;lt;u&amp;gt;einfach Anführungszeichen&amp;lt;/u&amp;gt; nimmt!&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Die doppelten Anführungszeichen braucht man für Java!&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Strategie==&lt;br /&gt;
&amp;#039;&amp;#039;Die möglichen Fehlerbehandlungen werden in der Strategie nicht berücksichtigt.&amp;#039;&amp;#039;&lt;br /&gt;
# Es gibt ein Attribut &amp;lt;code&amp;gt;connector&amp;lt;/code&amp;gt; vom Typ &amp;lt;code&amp;gt;DatabaseConnector&amp;lt;/code&amp;gt;&lt;br /&gt;
# Im Konstruktor wird der &amp;lt;code&amp;gt;connector&amp;lt;/code&amp;gt; erzeugt.&lt;br /&gt;
# In der Methode &amp;lt;code&amp;gt;schuelerDerKlasse(String pKlasse)&amp;lt;/code&amp;gt; geht man so vor:&lt;br /&gt;
## SQL-Statement &amp;quot;zusammenbauen&amp;quot;: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;String sqlStatement = &amp;quot; SELECT ...&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
## SQL-Statement ausführen: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;connector.executeStatement(sqlStatement);&amp;lt;/code&amp;gt;&lt;br /&gt;
## Das Ergebnis der SQL-Abfrage ermitteln: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;QueryResult queryResult = connector.getCurrentQueryResult()&amp;lt;/code&amp;gt;&lt;br /&gt;
## Die Daten des Ergebnisses ermitteln: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;String[][] data = queryResult.getData();&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;Man erhält ein 2-dimensionales Array. &amp;lt;br/&amp;gt;Dabei ist die erste Dimension für die Zeilen, die zweite Dimension für die Spalten.&lt;br /&gt;
## Die Zeilen werden mit einer &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;-Schleife durchlaufen: &amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;for (int i = 0; i &amp;lt; data.length; i++)&amp;lt;/code&amp;gt;&lt;br /&gt;
## Jetzt liest man die einzelnen Werte nach Spaltennummer aus, z.B. für den Namen&amp;lt;br/&amp;gt;&amp;lt;code&amp;gt;String name = data[i][0];&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;#039;&amp;#039;Man erhält grundsätzlich Objekte vom Typ &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;. &amp;lt;br/&amp;gt;Evtl. muss man sie noch in einen richtigen Datentyp konvertieren.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Java-Code==&lt;br /&gt;
 &amp;lt;code&amp;gt;&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;public class DatenbankTest {&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;private DatabaseConnector connector;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;public DatenbankTest() {&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Die Verbindung zur Datenbank aufbauen&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
        //                                    ip       port database  user     password&lt;br /&gt;
        connector = new DatabaseConnector(&amp;quot;localhost&amp;quot;, 3306, &amp;quot;demo&amp;quot;, &amp;quot;admin&amp;quot;, &amp;quot;geheim&amp;quot;);&lt;br /&gt;
        String errorMessage = connector.getErrorMessage();&lt;br /&gt;
        if(errorMessage != null) System.err.println(errorMessage);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;public List&amp;lt;Person&amp;gt; schuelerDerKlasse(String &amp;lt;font color=&amp;#039;red&amp;#039;&amp;gt;pKlasse&amp;lt;/font&amp;gt;){&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
        List&amp;lt;Person&amp;gt; ergebnis = new List&amp;lt;Person&amp;gt;();&lt;br /&gt;
 &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;//Das SQL-Statement zusammenbauen&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;       &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Der Paramenter &amp;lt;font color=&amp;#039;red&amp;#039;&amp;gt;pKlasse&amp;lt;/font&amp;gt; wird &amp;quot;eingebaut&amp;quot;. - man muss auf die Leerzeichen achten!!&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;       &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Dabei muss man muss auf die &amp;lt;u&amp;gt;Leerzeichen&amp;lt;/u&amp;gt; achten...&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;       &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// ... und die &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;#039;orange&amp;#039;&amp;gt;&amp;lt;u&amp;gt;einfachen Anführungszeichen für SQL&amp;lt;/u&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt; mitschreiben! &amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;       &lt;br /&gt;
 &lt;br /&gt;
        String sqlStatement =&lt;br /&gt;
          &amp;quot; &amp;lt;font color=&amp;#039;grey&amp;#039;&amp;gt;SELECT s.name, s.vorname&amp;lt;/font&amp;gt; &amp;quot;+&lt;br /&gt;
          &amp;quot; &amp;lt;font color=&amp;#039;grey&amp;#039;&amp;gt;FROM schueler s JOIN klasse k&amp;lt;/font&amp;gt; &amp;quot;+&lt;br /&gt;
          &amp;quot; &amp;lt;font color=&amp;#039;grey&amp;#039;&amp;gt;ON s.klasse_id = k.id&amp;lt;/font&amp;gt; &amp;quot;+&lt;br /&gt;
          &amp;quot; &amp;lt;font color=&amp;#039;grey&amp;#039;&amp;gt;WHERE k.name = &amp;lt;/font&amp;gt;&amp;lt;font color=&amp;#039;orange&amp;#039;&amp;gt;&amp;lt;b&amp;gt;&amp;#039;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;quot; +&amp;lt;font color=&amp;#039;red&amp;#039;&amp;gt;&amp;lt;b&amp;gt; pKlasse &amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;+ &amp;quot;&amp;lt;font color=&amp;#039;orange&amp;#039;&amp;gt;&amp;lt;b&amp;gt;&amp;#039;&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; &amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Zur Kontrolle das SQL-Statement ausgeben&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;       &lt;br /&gt;
        System.out.println(sqlStatement);&lt;br /&gt;
 &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Das SQL-Statement ausführen&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;       &lt;br /&gt;
        connector.executeStatement(sqlStatement);&lt;br /&gt;
  &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Das Ergebnis der Datenbankabfrage ermitteln:&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;             &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Man erhält ein Objekt vom Typ QueryResult&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;             &lt;br /&gt;
        QueryResult queryResult = connector.getCurrentQueryResult();&lt;br /&gt;
 &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Die Daten aus QueryResult auslesen&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;             &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Die Daten werden als 2-dim. Array wiedergegeben:&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;             &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;//   1. Dimension: &amp;lt;u&amp;gt;Zeile&amp;lt;/u&amp;gt; des Ergebnisses&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;             &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;//   2. Dimension: &amp;lt;u&amp;gt;Spalte&amp;lt;/u&amp;gt; des Ergebnisses (in der Reihenfolge wie im SQL-Statement&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;        &lt;br /&gt;
        String[][] data = queryResult.getData();&lt;br /&gt;
 &lt;br /&gt;
        &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Die &amp;lt;u&amp;gt;Zeilen&amp;lt;/u&amp;gt; durchlaufen &amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;             &lt;br /&gt;
        for (int i = 0; i &amp;lt; data.length; i++) {&lt;br /&gt;
             &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// Die einzelnen &amp;lt;u&amp;gt;Spalten&amp;lt;/u&amp;gt; einer Zeile abfragen &amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;             &lt;br /&gt;
            String name = data[i][0];&lt;br /&gt;
            String vorname = data[i][1];&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// ein Person-Objekt erzeugen ...&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;         &lt;br /&gt;
            Person p = new Person(name, vorname);&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;lt;b&amp;gt;// ... und an die Liste ergebnis anhaengen&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;         &lt;br /&gt;
            ergebnis.append(p);&lt;br /&gt;
        }&lt;br /&gt;
        return ergebnis;&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    &amp;#039;&amp;#039;&amp;#039;public static void main(String[] args) {&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
        new GUI(new DatenbankTest());&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>sibiwikialt&gt;Akaibel</name></author>
	</entry>
</feed>