jdbc

Werbung
Learning By Doing
JDBC (Java DataBase Connectivity)
Der Begriff JDBC bezeichnet ein von Sun entwickeltes
Verfahren und eine zugehörige Klassenbibliothek, die es
ermöglicht, mit Java auf relationale Datenbanken zuzugreifen
Datenbanken spielen in unserer Informationsgesellschaft eine
ausserordentlich grosse Rolle. Immer grössere Bedeutung hat
der Zugriff auf Datenbanken über Netze auf TCP/IP-Basis.
Programmieren mit JDBC ist ein wichtiger Anwendungsbereich
der Java-Programmierung.
Inhalt der Kapitels
• Relationale Datenbanken
• Server-Datenbanken mit MySQL
• Zugriff auf Serverdatenbanken mit JDBC
• Programmieren mit JDBC
J a v a - A p p lik a tio n
JD B C
J D B C - T r e ib e r
D a te n b a n k
S e rv e r
Learning By Doing
Relationale Datenbanken
Client 1
Client 2
SQL-Statement
Result set
DBMS
Client 3
Data
DBMS (DataBase Management System)
• Werkzeuge zur Strukturierung und Manipulation der Daten
• Funktionen zur Eingabe, Veränderung, Suchen und Ausgabe der Daten
• Hilfsmittel zur Sicherung, Wiederherstellung und Schützen von Daten.
DBMS ist in der Regel auf einem Datenbankserver installiert, Clients greifen über
ein Netzwerk zu. Ein DBMS kann mehrere Datenbanken verwalten.
Zum Schutz der Daten müssen sich Clients authentifizieren (user, password).
Learning By Doing
Tabellen
Anschaulich werden Relationen als Tabellen dargestellt, deren Zeilen Datensätze
(records) enthalten, die die Informationsobjekte repräsentieren. Die Spalten genannt
Felder (fields), repräsentieren die Eigenschaften (Attribute) dieser Objekte.
• Attribute sind fest definiert
• identische Zeilen sind nicht erlaubt
• Reihenfolge der Zeilen bzw. Spalten ist beliebig.
Learning By Doing
Was bedeutet "relational" ?
Bsp: Eine Universität erfasst alle Veranstaltungen in einer Tabelle:
Nachteile: Datenredundanz (gleiche Daten werden mehrmals gespeichert)
Dateninkonsistenz (verschiedene "Versionen" für die gleichen Daten).
Darstellung mit zwei Tabellen, die in einer Relation stehen:
Learning By Doing
Der Datenbankentwurf (Datenmodell) ist eine der wichtigsten Aufgaben, die
der Datenbankentwickler zu erfüllen hat.
Lernveranstaltungen
Dozenten
Institute
Raumbelegung
Inventar
Learning By Doing
SQL: einige wichtige SQL Anweisungen
1. Definitionen
CREATE DATABASE demo;
CREATE TABLE buch( );
DROP TABLE buch;
2. Operationen
USE demo;
SHOW TABLES;
EXPLAIN TABLE buch;
Erstellt Datenbank demo
Erstellt Tabelle buch
Löscht die Tabelle buch
Öffnet die Datenbank demo
Zeigt alle Tabellen der aktuellen Datenbank
Zeigt die Struktur der Tabelle buch an
3. Queries: Suchen von Daten in einer Tabelle nach bestimmten Kriterien
SELECT * FROM buch WHERE autor = "Makler";
4. Datenmanipulation: Einfügen, Löschen, Aktualisieren von Datensätzen
INSERT INTO buch VALUES ("Meier", "Barbara");
DELETE FROM buch SET verlag = "Addison" WHERE verlag = "ad"
5. Zugriffsrechte definieren
GRANT ALL ON demo TO "username" IDENTIFIED BY "password";
REVOKE .....
Zugriffsrechte aufheben
Buch S. 656
Learning By Doing
MySQL
MySQL ist ein vollwertiges Datenbanksystem
• aufgebaut auf der Grundlage von SQL
• gratis im Internet (www.mysql.com), läuft auf den meisten Plattformen
• MySQL kann lokal oder auf einem Server installiert werden
• MySQL-Befehle können im Command-Modus eingegeben werden, es gibt
auch Tools mit grafischer Benutzeroberfläche (Navicat, MySQL Manager)
Die wichtigsten Datentypen
Buch S. 657
Learning By Doing
Eine MySQL Datenbank auf dem Server einrichten
Datenbankserver: kllab.unibe.ch
Anmeldung im Command-Modus:
1)
Abmelden:
>mysql –h kllab.unibe.ch –u user –p 
password 
mysql>quit
Bereits von mir ausgeführt (für alle user):
mysql> CREATE DATABASE sdb2;
GRANT ALL ON sdb2.* TO "sdb2" IDENTIFIED BY "db2";
Database öffnen:
2)
mysql> use sdb2; 
Database changed
• Gross-/Kleinschreibweise
wird bei den Befehlen nicht
berücksichtigt.
• jede Zeile endet mit ;
Learning By Doing
Eine Tabele erstellen:
3)
mysql> create table buch (
-> id integer not null auto_increment primary key,
-> autor char(25),
-> titel char(40),
-> jahr year,
-> verlag char(20),
-> preis float);
Query OK, 0 rows affected (0.05 sec)
4)
Buch S. 658
mysql> show tables;
+----------------+
| Tables_in_sdb2 |
+----------------+
| buch
|
+----------------+
|1 rows in set (0.02 sec)
Learning By Doing
5)
mysql> EXPLAIN buch;
+--------+----------+------+-----+---------+----------------+
| Field | Type
| Null | Key | Default | Extra
|
+--------+----------+------+-----+---------+----------------+
| id
| int(11) |
| PRI | NULL
| auto_increment |
| autor | char(25) | YES |
| NULL
|
|
| titel | char(40) | YES |
| NULL
|
|
| jahr
| year(4) | YES |
| NULL
|
|
| verlag | char(25) | YES |
| NULL
|
|
| preis | float
| YES |
| NULL
|
|
+--------+----------+------+-----+---------+----------------+
6 rows in set (0.05 sec)
6)
mysql> INSERT INTO buch (autor, titel, jahr, verlag, preis)
> VALUES ("Mankell", "Frost", 2003, "Zsolnay", 24.90);
Query OK, 1 row affected (0.00 sec)
Learning By Doing
7)
mysql>SELECT * FROM buch;
+----+---------+---------+------+-------+-------+
| id | autor
| titel
| jahr |verlag |preis
+----+---------+---------+------+--------+------+
| 1 | Mankell | Frost
| 2003 |Zsolnay|24.90
| 2 | Draesler| MySQL
| 2004 |bhv
|21.50
| 3 | Mankell | Sommer | 2001 |Addison|59.20
+----+---------+---------+------+-------+-------+
8)
mysql>SELECT * FROM buch WHERE autor = "Mankel";
+----+---------+---------+------+-------+-------+
| id | autor
| titel
| jahr |verlag |preis
+----+---------+---------+------+--------+------+
| 1 | Mankell | Frost
| 2003 |Zsolnay|24.90
| 3 | Mankell | Sommer | 2001 |Addison|59.20
+----+---------+---------+------+-------+-------+
Learning By Doing
Abfragen mit SELECT
Allgemeine Form:
SELECT spalte .... Ausdruck ....
FROM tabelle
WHERE Vergleichsaudruck
ORDER BY spalte [ASC|DESC]
LIMIT Anzahl Zeilen
Weitere Auswahlmöglichkeiten:
SELECT * FROM buch WHERE autor = "Mankell" AND titel = "Frost";
SELECT * FROM buch WHERE jahr = 2002 OR jahr = 2004;
SELECT * FROM buch WHERE autor IN ("Mankell", "Draessler", "Bauer" );
SELECT * FROM buch WHERE jahr BETWEEN 2002 AND 2004;
Learning By Doing
Zugriff auf MySQL Datenbanken
verschiedene Client-Server Technologien
Client-Applikationen
Java-Datenbankapplikation
auf dem Client
DBMS auf dem Server
Client 1
JDBC, Java
Client 2
JDBC, Java
Datenbankserver
SQL-Statement
Result set
DBMS
MySQL
Daten
Client 3
JDBC, Java
Webserver
Webdatenbanken
Alle Installationen auf
dem Server, auf dem
Client nur Browser
Webserver mit Plugins
(Tomcat, PHP)
Client 1
Browser
Client 2
Browser
HTTP-Request
JSP-Engine
Servlet
HTTP-Response
Java, JDBC
Client 3
Browser
DBMS
MySQL
Daten
Learning By Doing
JDBC (Java DataBase Connectivity)
JDBC enthält Objekte und Methoden, die den Zugriff auf Datenbanken ermöglichen.
Die Java-Applikation läuft auf einem Client-Rechner, der mit Hilfe des entsprechenden
JDBC-Treibers eine Verbindung zu einer auf einem Remote-Server liegenden
Datenbank aufbaut.
JDBC-Treiber für MySQL: mysql-connector-java-3.0.8-stable-bin.jar
(von "http://dev.mysql.com/downloads/connector/" herunterladen und in das Verzeichnis jre/lib/ext
des JDK's kopieren).
Der Zugriff erfolgt in folgenden Schritten:
Client (Java-Applikation)
1. Importieren der notwendigen Klassen
import java.sql.*;
Datenbankserver mit MySQL
2. JDBC-Treiber laden
3. Verbindung zur Datenbank erstellen
4. Statement-Objekt erstellen und
SQL-Statement definieren
7. Ergebnisse anzeigen
8. Verbindung zur Datenbank schliessen
Buch S. 662
Statement
4. SQL-Query wird ausgeführt
5. Resultset wird zurückgeschickt
Resultset
Daten
Learning By Doing
DbEx1.java
import java.sql.*;
importieren der notwendigen Klassen
JDBC-Treiber laden
Class.forName("org.gjt.mm.mysql.Driver");
Verbindung zur
Datenbank erstellen
Connection
Connection con
con =
= DriverManager.getConnection(
DriverManager.getConnection(
"jdbc:mysql://130.92.13.49/sdb2/","sdb2","db2");
"jdbc:mysql://130.92.13.49/sdb2/","sdb2","db2");
Statement
Statement stmt
stmt =
= con.createStatement();
con.createStatement();
Statement-Objekt erstellen
ResultSet
ResultSet rs
rs == stmt.executeQuery("SELECT
stmt.executeQuery("SELECT ** FROM
FROM buch");
buch");
while
+
+
+
Statement ausführen
(rs.next())
rs.getString("titel") + ", erschienen "
rs.getInt("jahr") + " bei "
Ergebnis anzeigen
rs.getString("verlag"));
stmt.close();
stmt.close();
con.close();
con.close();
Buch S. 663
Statement und Verbindung schliessen
Learning By Doing
Aufgaben
Ergänzen Sie die Datenbankapplikation DbEx1.java mit verschiedenen
SQL-Abfragen:
ResultSet rs = stmt.executeQuery("SELECT * FROM buch WHERE
autor = 'Mankell'");
ResultSet rs = stmt.executeQuery("SELECT * FROM buch WHERE
jahr = 2003 AND verlag = 'Zsolnay'");
Achten Sie dabei auf die doppelten Anführungszeichen " '
' " .
Learning By Doing
Datenbank-Applikation mit einer grafischen Benutzeroberfläche
Die Datebank-Applikation DbEx2.java mit der zugehörigen Klasse DbDialog.java
enthält alle für die Praxis wichtigen Datenbankoperationen (Navigation, Update,
Insert, Delete).
Ihre Aufgabe ist, diese Applikation so anzupassen, so dass Sie mit Ihrer
Datenbank kommuniziert. Fügen Sie einige Datensätze hinzu und testen Sie
beide Applikationen DbEx1.java und DbEx2.java.
Buch S. 665
Learning By Doing
Vorteile von Java und JDBC:
• Einfachheit
• Leichte Handhabung bei Installation und Versionenkontrolle
• Sicherheit
• Stabilität
• Plattformunabhängigkeit
• Weiterverwendbarkeit verschiedener Datenbanksysteme
• Kostengünstig (alle Komponenten gratis vom Internet)
Herunterladen