Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:projekt:java_db:start [31.03.2025 16:53] – [Datenbankzugriff Schritt für Schritt] Frank Schiebel | faecher:informatik:oberstufe:datenbanken:projekt:java_db:start [03.04.2025 19:53] (aktuell) – [Projektvorschläge] Frank Schiebel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ~~NOTOC~~ | ||
+ | |||
====== Datenbankzugriff mit Java ====== | ====== Datenbankzugriff mit Java ====== | ||
Zeile 14: | Zeile 16: | ||
Java verwendet hier **JDBC ("Java Database Connectivity" | Java verwendet hier **JDBC ("Java Database Connectivity" | ||
- | ===== Erstes Beispiel | + | ===== Einführung |
- | + | ||
- | Im ersten Beispiel werden wir ohne grafische Benutzerschnittstelle (GUI) auf eine SQLite Datenbank zugreifen, um uns zunächst auf die Datenbankfunktionalität zu konzentrieren. | + | |
- | + | ||
- | [[https:// | + | |
- | + | ||
- | Das Beispiel brint zwei SQLite Datenbanken mit: | + | |
- | + | ||
- | * schueler.db | + | |
- | * adressen.db | + | |
- | + | ||
- | ---- | + | |
- | {{: | + | |
- | === (A1) === | + | |
- | + | ||
- | Untersuche die beiden Datenbanken, | + | |
- | + | ||
- | ++++ Lösung | | + | |
- | * Die Schülerdatenbank hat nur eine Tabelle, diese heißt '' | + | |
- | * Als Spalten/ | + | |
- | ++++ | + | |
- | + | ||
- | ==== Bibliotheken einbinden ==== | + | |
- | + | ||
- | Die Bibliotheken für den Datenbankzugriff befinden sich im Unterverzeichnis '' | + | |
- | + | ||
- | Der Ordner '' | + | |
- | + | ||
- | < | + | |
- | import java.sql.Connection; | + | |
- | import java.sql.DriverManager; | + | |
- | import java.sql.Statement; | + | |
- | import java.sql.ResultSet; | + | |
- | import java.sql.SQLException; | + | |
- | </ | + | |
- | + | ||
- | Das sieht so ähnlich aus, wie wenn wir Array-Lists verwenden wollen, nur dass die Bibliothektsfunktionen für SQL eben nicht (wie ArrayList) mit Java " | + | |
- | + | ||
- | Der gesamte Code sieht so aus: | + | |
- | + | ||
- | <code java> | + | |
- | import java.sql.Connection; | + | |
- | import java.sql.DriverManager; | + | |
- | import java.sql.Statement; | + | |
- | import java.sql.ResultSet; | + | |
- | import java.sql.SQLException; | + | |
- | + | ||
- | public class Adressen | + | |
- | { | + | |
- | Connection DBConnection; | + | |
- | public Adressen() | + | |
- | { | + | |
- | System.out.print(' | + | |
- | String uri = " | + | |
- | connect(uri); | + | |
- | + | ||
- | try { | + | |
- | Statement statement = DBConnection.createStatement(); | + | |
- | ResultSet result = statement.executeQuery(" | + | |
- | while(result.next()) { | + | |
- | String nachname = result.getString(" | + | |
- | String vorname = result.getString(" | + | |
- | System.out.print(String.format(" | + | |
- | System.out.print(String.format(" | + | |
- | System.out.println(); | + | |
- | } | + | |
- | } catch (SQLException e) { | + | |
- | System.out.println(e.getMessage()); | + | |
- | + | ||
- | } | + | |
- | + | ||
- | } | + | |
- | + | ||
- | public void connect(String DBUri) { | + | |
- | try { | + | |
- | DBConnection = DriverManager.getConnection(DBUri); | + | |
- | System.out.println(" | + | |
- | + | ||
- | } catch (SQLException e) { | + | |
- | System.out.println(e.getMessage()); | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | ==== Fehlerbehandlung ==== | + | |
- | + | ||
- | Alle Datenbankoperationen müssen in '' | + | |
- | + | ||
- | ---- | + | |
- | {{: | + | |
- | === (A2) === | + | |
- | + | ||
- | Compiliere das Programm und erzeuge eine Instanz der Klasse '' | + | |
- | + | ||
- | baue Fehler ein und teste, wie sich das Programm verhält: | + | |
- | + | ||
- | * Ändere den Dateiverweis '' | + | |
- | * Baue Fehler in die SQL-Abfrage in Zeile 18 ein | + | |
- | * Probiere weitere Fehler aus. | + | |
- | + | ||
- | <callout type=" | + | |
- | Hier erkennt man, warum die Fehlerbehandlung wichtig ist: Der Java Compiler weiß nichts über deine Datenbanken, | + | |
- | </ | + | |
- | + | ||
- | ==== Datenbankzugriff Schritt für Schritt ==== | + | |
- | + | ||
- | Der Zugriff auf die Datenbank erfolgt in mehreren Schritten: | + | |
- | + | ||
- | * Datenbankverbindung herstellen | + | |
- | * Auf dieser Verbindung ein '' | + | |
- | * Mit Hilfe des Statements kann eine SQL Abfrage an die Datenbank gesendet werden | + | |
- | * Das Ergebnis ist vom Typ '' | + | |
- | + | ||
- | {{ : | + | |
- | + | ||
- | + | ||
- | === Am Beispiel: === | + | |
- | + | ||
- | * Die Klasse hat ein Attribut '' | + | |
- | * Unter Verwendung dieser Verbindung kann jetzt ein Objekt des Typs '' | + | |
- | <code java> | + | |
- | Statement statement = DBConnection.createStatement(); | + | |
- | </ | + | |
- | * Auf diesem '' | + | |
- | <code java> | + | |
- | ResultSet result = statement.executeQuery(" | + | |
- | </ | + | |
- | * Über die Elemente des ResultSets kann mit einem Iterator iteriert werden, das entspricht in etwa einem " | + | |
- | <code java> | + | |
- | while(result.next()) { | + | |
- | + | ||
- | } | + | |
- | </ | + | |
- | + | ||
- | * Der Zugriff auf die Spalten eines Ergebnis-Datensatzes kann entweder über den Feldnamen oder die laufende Nummer((Startet bei 1...)) erfolgen: | + | |
- | + | ||
- | <code java> | + | |
- | String nachname = result.getString(" | + | |
- | Integer klasse = result.getInt(" | + | |
- | </ | + | |
- | + | ||
- | <callout type=" | + | |
- | Hier muss die Programiererin wieder genau aufpassen und das Programm passend zur Datenbank programmieren: | + | |
- | + | ||
- | Als Variablentypen sollten auch bei den primitiven Datentypen wie '' | + | |
- | </ | + | |
- | + | ||
- | Einen Überblick über die Methoden findest du in der Java-Dokumentation: | + | |
- | ---- | + | |
- | {{: | + | |
- | === (A3) === | + | |
- | + | ||
- | Ergänze das Programm so, dass außer Nach- und Vorname der Schülerinnen auch die Klasse abgefragt und ausgegeben wird. Verwende für die Abfrage der Klasse als Java-Variablentyp '' | + | |
- | {{ :faecher: | + | Die Beispiele Verwenden '' |
- | ++++ Lösungsvorschlag | + | * [[.java_db_schuelerliste: |
- | <code java> | + | * [[.java_db_schuelerliste_suche: |
- | [....] | + | * [[.java_db_schuelerliste_insert: |
- | while(result.next()) { | + | * [[.java_db_null: |
- | | + | |
- | String vorname = result.getString(" | + | |
- | Integer klasse = result.getInt(" | + | |
- | System.out.print(String.format(" | + | |
- | System.out.print(String.format(" | + | |
- | System.out.print(klasse + " | + | |
- | System.out.print(klasse + 1 + " | + | |
- | System.out.println(); | + | |
- | } | + | |
- | [....] | + | |
- | </ | + | |
- | ++++ | + | |
- | ---- | + | ===== Projektvorschläge ===== |
- | {{: | + | |
- | === (A4) === | + | |
- | Ändere den Code aus Aufgabe 3 so ab, dass du die KLasse in eine Java-Variable des Typs '' | + | * [[.java_db_p_tagebuch: |
+ | * [[.java_db_p_mondial: | ||
+ | * [[.java_db_p_adressbuch: | ||
- | ++++ Lösungshinweis | | + | ===== Material ===== |
- | Da das Feld jetzt als String ausgelesen wird, verkettet Java das auch als String, es wird nicht mehr korekt addiert. Wenn man nicht auf die korrekte Passung der Datentypen achtet, können seltsame Dinge geschehen. | + | |
- | {{ : | + | |
- | ++++ | + | |
- | ---- | + | [[https:// |
- | {{:aufgabe.png?nolink | + | |
- | === (A5) === | + | |
- | Was passiert, wenn du versuchst, den Vor oder Nachnamen in eine Java-Variable | + | ---- |
+ | Die Materialien und Inhalte | ||
- | ++++ Lösungshinweis | | ||
- | {{ : | ||
- | ++++ |