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:47] – [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=" | + | Die Beispiele Verwenden |
- | Hier muss die Programiererin wieder genau aufpassen und das Programm passend zur Datenbank programmieren: | + | |
- | Als Variablentypen sollten auch bei den primitiven Datentypen wie '' | + | * [[.java_db_schuelerliste:start|Schritt 1: Schülerliste komplett auslesen]] |
- | </ | + | * [[.java_db_schuelerliste_suche:start|Schritt 2: Suchen in der Schülerliste]] |
+ | * [[.java_db_schuelerliste_insert:start|Schritt 3: Daten in die Schülerliste einfügen]] | ||
+ | * [[.java_db_null:start|Schritt 4: Verarbeitung von Null-Werten]] | ||
- | Einen Überblick über die Methoden findest du in der Java-Dokumentation: | + | ===== Projektvorschläge ===== |
- | ---- | + | |
- | {{: | + | |
- | === (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 '' | + | * [[.java_db_p_tagebuch: |
+ | * [[.java_db_p_mondial: | ||
+ | * [[.java_db_p_adressbuch: | ||
- | {{ : | + | ===== Material ===== |
+ | |||
- | ++++ Lösungsvorschlag | | + | [[https:// |
- | <code java> | + | |
- | [....] | + | |
- | while(result.next()) { | + | |
- | String nachname = result.getString(" | + | |
- | 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(); | + | |
- | } | + | |
- | [....] | + | |
- | </ | + | |
- | ++++ | + | |
- | ---- | + | ---- |
- | {{:aufgabe.png? | + | Die Materialien und Inhalte des Bereichs " |
- | === (A4) === | + | |
- | Ändere den Code aus Aufgabe 3 so ab, dass du die KLasse in eine Java-Variable des Typs '' |