Was passiert heute ? •Ziel: wie kann man in Java auf Datenbanken

Werbung
Datenbanken - SQL und JDBC
Projektseminar
Seite 1
Was passiert heute ?
•Ziel: wie kann man in Java auf Datenbanken zugreifen und
Daten manipulieren ?
•dazu brauchen wir:
•Kenntnisse in SQL
(allgemein)
•Kenntnisse von JDBC
(Java-Spezifisch)
Seite 2
1
Warum Datenbanken ?
Seite 3
Warum Datenbanken ?
•Daten müssen persistent gespeichert werden
•Datenbankmanagementsysteme sind Standardsoftware
•hohe Performance
•Datenbanken bieten standardisierte Konzepte, die allgemein bekannt
sind
•SQL
•Relationen
•ERM
•Alternative zu Datenbanken: Daten selbst organisieren (z.B. in eigenen
Textdateien)
•Bedeutet: Entwicklung proprietärer Mechanismen
Seite 4
2
Was ist SQL ?
•Steht für: Structured Query Language
•ist geeignet für: Relationale Datenbanken
•Was kann man mit SQL machen:
•Tabellen anlegen und löschen
•Datenbankabfragen
•Datenbankmanipulationen
•Vorhandene Datensätze löschen
•Vorhandene Datensätze ändern
•Datensätze einfügen
•Benutzer- und Rechteverwaltung
Seite 5
Beispieltabelle
Tabelle Mitarbeiter
personalnummer
Integer
nachname
String
vorname
String
wohnort
String
taetigkeit
String
gehalt
Double
Seite 6
3
Einfache Datenabfrage
SELECT nachname, vorname, taetigkeit FROM mitarbeiter
Spalten
Tabelle
Ergebnis:
nachname
Müller
Meier
Lehmann
Schulze
vorname
Heiner
Gunther
Herbert
Dieter
taetigkeit
Maler
Maurer
Maurer
Dachdecker
Seite 7
Datenabfrage mit Bedingung
SELECT nachname, vorname, taetigkeit FROM mitarbeiter
WHERE taetigkeit=‚Maurer‘
Ergebnis
nachname
Meier
Lehmann
vorname
Gunther
Herbert
taetigkeit
Maurer
Maurer
Seite 8
4
Datenabfrage mit mehreren Bedingungen
SELECT nachname, vorname, taetigkeit, gehalt FROM
mitarbeiter WHERE taetigkeit=‚Maurer‘ AND gehalt>4000
Logische Verknüpfung
Ergebnis
nachname
Lehmann
vorname
Herbert
taetigkeit
Maurer
gehalt
4300
Seite 9
Datenabfrage über mehrere Tabellen
Weitere Beispieltabelle:
Tabelle Baustelle
baustelleID
Integer
bezeichnung
String
ort
String
auftraggeber
String
Tabelle Einsatzorte
baustelleID
Integer
personalnummer
Integer
funktion
String
Seite 10
5
JOIN-Datenabfrage mehrerer Tabellen
Welcher Mitarbeiter Arbeitet in welcher Funktion wo ?
SELECT mitarbeiter.nachname, mitarbeiter.vorname, baustellen.bezeichnung, baustellen.ort,
einsatzorte.funktion
FROM mitarbeiter, baustellen, einsatzorte
WHERE (((mitarbeiter.personalnummer)=[einsatzorte].[personalnummer]) AND
((baustellen.baustelleID)=[einsatzorte].[baustelleID]));
Ergebnis
Nachname vorname bezeichnung
Müller
Heiner Hauptbahnhof
Lehmann Herbert Hauptbahnhof
Schulze
Dieter
Autobahnkreuz Hödeldö
Meier
Gunther Autobahnkreuz Hödeldö
ort
Hamburg
Hamburg
Hannover
Hannover
funktion
Bauleiter
Gruppenleiter
Arbeiter
Hilfskraft
Seite 11
Angabe eines Ordnungskriteriums
SELECT mitarbeiter.nachname, mitarbeiter.vorname, mitarbeiter.wohnort,
mitarbeiter.taetigkeit
FROM mitarbeiter
ORDER BY mitarbeiter.nachname;
Ergebnis
nachname
Lehmann
Meier
Müller
Schulze
vorname
Herbert
Gunther
Heiner
Dieter
wohnort
Hannover
Göttingen
Hamburg
Bremen
taetigkeit
Maurer
Maurer
Maler
Dachdecker
Seite 12
6
Suchen in Datensätzen
Alle Mitarbeiter, die ein i im Vornamen haben
SELECT mitarbeiter.nachname, mitarbeiter.vorname, mitarbeiter.wohnort,
mitarbeiter.taetigkeit
FROM mitarbeiter
WHERE (((mitarbeiter.vorname) Like “%i%"));
%
= beliebig viele Zeichen
?
= genau ein beliebiges Zeichen
nachname
Müller
Schulze
vorname
Heiner
Dieter
wohnort
Hamburg
Bremen
taetigkeit
Maler
Dachdecker
Seite 13
Datensätze einfügen
Einen neuen Mitarbeiter hinzufügen
INSERT INTO mitarbeiter VALUES
(‚5‘,‘Schmidt‘,‘Klaus‘,‘Kiel‘,‘Maurer‘,‘3500‘)
Seite 14
7
Datensätze Manipulieren
Alle Mitarbeiter sollen eine Lohnerhöhung von 5 % erhalten
UPDATE mitarbeiter SET mitarbeiter.gehalt =
mitarbeiter.gehalt*1.05;
Bei Update sind auch Bedingungen möglich:
UPDATE mitarbeiter SET mitarbeiter.gehalt =
mitarbeiter.gehalt*1.05
WHERE mitarbeiter.taetigkeit=‚Maurer‘;
Seite 15
Datenbanken in Java
Was ist JDBC ?
•Steht für JAVA DATABASE CONNECTIVITY
•Technologie, um in Java auf Datenbanken zuzugreifen
•Es lassen sich verschiedene Möglichkeiten unterscheiden, wie
auf eine Datenbank zugegriffen wird.
•Über JDBC
•Über die JDBC-ODBC Brücke
•Reiner Java-Treiber
Seite 16
8
Zugriff über JDBC
Application Space
Java Application
JDBC-Driver
Result-Set
Native Database
Driver
SQLCommand
Proprietäter Datenfluß
Database
Seite 17
Zugriff über JDBC-ODBC Bridge
Application Space
Java Application
JDBC-ODBC-Bridge
Result-Set
ODBC-Driver
SQLCommand
Proprietäter Datenfluß
Database
Seite 18
9
Reiner Java-Treiber
Application Space
Java Application
JDBC-Driver
Result-Set
propriätarer
Datenfluss
Database
Seite 19
Schritte bis zum Datenbankzugriff
1. ODBC-Datenquelle im System einrichten (außerhalb Java)
2. Eine Verbindung zur Datenbank aufbauen
3. Formulieren eines SQL-Statements
4. Durchführen der SQL-Abfrage
5. Auslesen der Ergebnisse
6. Verwerten der Ergebnisse
Seite 20
10
ODBC-Quelle einrichten
Seite 21
Eine Verbindung zur Datenbank aufbauen
Relevante Klassen, Interfaces, Packages: Connection, java.sql
Relevante Informationen:
•ODBC-Datenquellenname
•Logininformationen (Username, Passwort)
final String JDBC_TREIBER = "sun.jdbc.odbc.JdbcOdbcDriver";
final String ODBC_QUELLE = "jdbc:odbc:myxml";
final String ODBC_USER = "";
final String ODBC_PW = "";
private Connection con = null;
// Code zum instantiieren der Verbindung
Class.forName(JDBC_TREIBER);
con = DriverManager.getConnection(ODBC_QUELLE, ODBC_USER, ODBC_PW);
Seite 22
11
Exkurs: Fehlerbehandlungen durch Exceptions
try {
Class.forName(JDBC_TREIBER);
con = DriverManager.getConnection(ODBC_QUELLE, ODBC_USER, ODBC_PW);
}
catch (ClassNotFoundException cnfe) { System.err.println(cnfe.getMessage()); }
catch (Exception e) { System.err.println(e.getMessage()); }
Try-Catch-Block
Exceptions - Was ist das ?
•Exceptions fangen Fehler zur Laufzeit auf
•Exceptions sind nicht optional, sondern Pflicht
•Ermöglicht / zwingen zum fehlertoleranten Programmieren
•Helfen beim Debugging
•blähen allerdings den Programmcode auf (kein wirklicher Nachteil)
Seite 23
SQL-Statement formulieren
Relevante Klassen, Interfaces, Packages: Statement, java.sql
String sqlStatement;
// Statement als String
sqlStatement=„SELECT nachname, vorname, taetigkeit FROM mitarbeiter“;
Statement s=con.createStatement();
// Statement instantiieren
Seite 24
12
SQL-Statement durchführen
Relevante Klassen, Interfaces, Packages: Statement, ResultSet, java.sql
String sqlStatement;
// Statement als String
sqlStatement=„SELECT nachname, vorname, taetigkeit FROM mitarbeiter“;
Statement s=con.createStatement();
// Statement instantiieren
ResultSet rs=s.executeQuery(sqlStatement);
Die Klasse ResultSet kapselt das Ergebnis einer SQL-Abfrage
Seite 25
SQL-Statement durchführen - Update
String sqlStatement;
sqlStatement=„UPDATE ...“;
Statement s=con.createStatement();
s.executeUpdate(sqlStatement);
// Statement als String
// Statement instantiieren
Bei einer Update-Abfrage gibt es kein Ergebnis, da die Daten manipuliert
und nicht abgefragt werden. Es ist also kein ResultSet - Objekt notwendig
Seite 26
13
Auslesen der Ergebnisse und Verwertung
while (rs.next()) {
// Über alle Ergebnisdatensätze iterieren
tmp_doc = new RepositoryDocument();
// Ein Objekt, das die Ergebnisse verwertet
tmp_doc.setId(Integer.toString(rs.getInt("B_ID")));
// Auslesen eines DB-Feldes
tmp_doc.setTitel(rs.getString("B_Titel"));
tmp_doc.setText(rs.getString("B_Text").substring(0,170));
tmp_doc.setKategorieBezeichnung(rs.getString("K_Bezeichnung"));
documentList.add(tmp_doc);
}
Seite 27
Zusammenfassung - DB-Klassen
Klassen / Interfaces:
Connection : Kapselt eine DB-Verbindung
Statement : Kapselt ein Datenbankstatement
ResultSet : Kapselt das Ergebnis einer DB-Abfrage
Methoden:
Statement Connection.createStatement();
// Ein Statement-Objekt liefern
ResultSet Statement.executeQuery(String) // Ausführen eines SQL-Statements
ResultSet.Next()
// Einen Datensatz weiterspringen
ResultSet.getString(„FELDNAME“)
// Spalten der Relation lesen
ResultSet.getInt(„FELDNAME“)
Seite 28
14
Architektur für den DB-Zugriff
Client
Controll
View
Model
Kapselt DB-Zugriffe /
SQL-Statements
(speziell)
DB-Methoden
Kapselt DB-Zugriffe DB-Bean
(allgemein)
ODBC
Middleware
Relationenmodell
Seite 29
15
Herunterladen