Einführung in JDBC. IFIS Universität zu Lübeck 18.04.2007



Ähnliche Dokumente
Ho Ngoc Duc IFIS - Universität zu Lübeck

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Client/Server-Programmierung

Client/Server-Programmierung

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Java Database Connectivity-API (JDBC)

Java Database Connectivity-API (JDBC)

Datenbanken SQL JDBC. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 21

Java Database Connectivity-API (JDBC)

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Datenbanksysteme 2011

Oracle: Abstrakte Datentypen:

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Beispiel: DB-Mock (1/7)

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7

Webbasierte Informationssysteme

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Java und Datenbanken

Java: MySQL-Anbindung mit JDBC.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Datenbanken & Informationssysteme Übungen Teil 1

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren

JDBC. Allgemeines ODBC. java.sql. Beispiele

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

Webbasierte Informationssysteme

Java Database Connectivity API / JDBC

Datenbanken SQL-Grundlagen JDBC SQL-Constraints. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Datenbank und Informationssysteme

JDBC. Java DataBase Connectivity

Folgendes PL/SQL Codefragment zeigt das grundlegende Statement für diesen Test: Java.

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

vs. Fehler zur Übersetzungszeit

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Oracle & Java HOW TO

Prozedurale Datenbank- Anwendungsprogrammierung

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Verteidigung gegen SQL Injection Attacks

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Programmieren II. Relationale Datenbanken. Vorlesung 07. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011.

SQL (Structured Query Language) Schemata Datentypen

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Klausur zur Vorlesung Datenbanksysteme I

Distributed Computing Group

Hauptschritte einer JDBC-App

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

Von ODBC zu OLE DB. Neue Möglichkeiten der Datenintegration. Harald Gladytz, Team Vertrieb ESRI Niederlassung Leipzig

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

Tag 5 Inhaltsverzeichnis

Klausur Datenbanken II

Java Database Connectivity-API (JDBC)

Willkommen. Datenbanken und Anbindung

6.9 Java Server Pages

Hochschule Karlsruhe Technik und Wirtschaft

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

SQL und MySQL. Kristian Köhntopp

Wie kommen die Befehle zum DBMS

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Transaktionen in der Praxis. Dr. Karsten Tolle

Interaktive Webseiten mit PHP und MySQL

Datenbankanwendungen (JDBC)

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

PostgreSQL unter Debian Linux

Datenbankschnittstellen erlauben Zugriff auf Datenbank aus einer externen Anwendung

Kapitel 11: Anwendungsentwicklung

C# - Einführung in die Programmiersprache Arbeiten mit ADO.NET. Leibniz Universität IT Services Anja Aue

3. Stored Procedures und PL/SQL

11 Anwendungsprogrammierung

1a) SQL Stored Procedure via IDs

MySQL mit MyLinux. 2/2003 Java unter Linux

Übung Datenbanken in der Praxis. Datenmodifikation mit SQL

Exercises for the course Databases and Information Systems I WS 2006/2007 Special exercise JDBC

Java: Vererbung. Teil 3: super()

Technische Beschreibung: EPOD Server

Architekturen. Von der DB basierten zur Multi-Tier Anwendung. DB/CRM (C) J.M.Joller

Kapitel 11: Anwendungsentwicklung

Android Java Specifics / Basic IO

Zugriff auf Firebird-Datenbanken mit PHP. Daniel de West DB-Campus-Treffen 15. Januar 2004

Gesicherte Prozeduren

Themen. Web Service - Clients. Kommunikation zw. Web Services

Vorlesung Informatik II

Relationale Datenbanken in der Praxis

desk.modul : WaWi- Export

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung

OP-LOG

MySQL mit MyLinux. 2/2003 Java unter Linux

Kapitel DB:VI (Fortsetzung)

Transkript:

Einführung in JDBC IFIS Universität zu Lübeck 18.04.2007 1

Was ist JDBC Standard für relationale DB: SQL Vor JDBC: Open Database Connectivity (ODBC), uniforme Schnittstelle für Zugriff JDBC: Programmierschnittstelle (Java API) für Zugriff auf relationale Datenbanken Ermöglicht Java Programmen, SQL Befehle an relationale Datenbanken zu schicken Beliebige DB, lokal oder über das Netz 2

Was ist JDBC (cont.) Sammlung von Klassen und Interfaces Für jedes DBMS: JDBC Treiber Klasse Low level: ruft SQL direkt auf Grundlage für higher level APIs JDBC is a trademarked name and is not an acronym;... often thought of as standing for "Java Database Connectivity 3

Unterstützte SQL Befehle SQL ANSI SQL 2 Entry Level Nicht von allen JDBC Treibern erfüllt Wichtigste Befehle: SELECT CREATE TABLE, ALTER TABLE, DROP TABLE INSERT, UPDATE, DELETE COMMIT, ROLLBACK 4

Ablaufschema Laden eines JDBC Treibers Aufbau einer Verbindung zur Datenbank Aufbau eines SQL Statements Senden des Statements an die Datenbank [Analyse der Struktur der Ergebnismenge] Laden der Rückgabedaten Weiterverarbeiten der Daten Beenden der Datenbankverbindung 5

Ein umfassendes Beispiel Java Programm betrachten, das über JDBC auf eine Datenbank zugreift und sie mit SQL manipuliert Für das Beispiel: hsqldb verwenden. Soll auch mit mysql, DB2 usw. funktionieren Tabellen und Daten vom Programm erzeugt Gelesene Daten in System.out ausgeben 6

Bibliotheken verwenden Beim Programmaufruf: Treiber Klassen (z.b: hsqldb.jar oder db2java.zip) in CLASSPATH aufnehmen. Kann in Startup Skript (.bashrc, autoexec.bat) geschehen Im Source Code: packages (oder einzelne Klassen) importieren (import java.sql.*;) 7

Schritt 1: Treiber laden Nur einmal am Anfang des Programms Class.forName(nameDerTreiberKlasse); Beispiel: mit HSQLDB: Class.forName( org.hsqldb.jdbcdriver ); DB2: COM.ibm.db2.jdbc.app.DB2Driver mysql: org.gjt.mm.mysql.driver 8

Schritt 2: Verbindung aufbauen Connection con = DriverManager.getConnection(url, user, passwd); URL treiberabhängig. Besteht aus Protokol, Host (oder IP Adresse), Port, Parameter... jdbc:hsqldb:hsql://localhost[:9001] jdbc:db2:prakt, jdbc:db2://linse[:6789]/prakt jdbc:mysql://mypc/mydb user, password können u.u. null sein 9

Schritt 3: SQL Statement aufbauen SQL Befehle an DB: java.sql.statement (Container für Befehlausführung) 3 Typen von Statements: Statement (ohne Parameter), PreparedStatement (mit/ohne IN Parameter), CallableStatement In Bezug auf aktuelle Verbindung erzeugen Statement stmt = con.createstatement(); 10

Schritt 4: Senden des SQL Statements an Datenbank SQL Befehle als String an Statement übergeben. Je nach Art der Anfrage wird stmt.executequery(string arg) oder stmt.executeupdate(string arg) ausgeführt [Es gibt noch execute, nur Sonderfälle] Bsp: String query = select * from Artikel ; stmt.executequery(query); 11

Schritt 5: Ergebnis laden Ergebnis der Anfrage: java.sql.resultset ResultSet res = stmt.executequery(query); In fetch Schleife die Ergebnisse holen: while (res.next()) { String n = res.getstring( Name );... } Alternative: über Index lesen: getint(2); 12

Schritt 6: Weiterverarbeiten Ergebnisdaten vom Programm weiter verarbeitet: Berechnungen, Visualisierung... Bsp: {String n = res.getstring( Name ); System.out.println(n);} im einfachsten Fall In vielen Fällen: Daten zwischenspeichern (z.b. in einer Collection). In Schleife: Zeile lesen, Objekt erzeugen, Objekt in Container stecken 13

Schritt 7: Verbindung beenden Resourcen freigeben. Verbindungen explizit schließen Empfehlenswert: Statements schließen mit stmt.close() Vebindung beenden mit con.close(); 14

Exceptions behandeln Viele Methodenaufrufe: Exception Mit try/catch Konstrukt abfangen & behandeln try { Connection con = DriverManager.getConnection(url, user, passwd); } catch (SQLException e) { System.err.println( Cannot connect: +e);} 15

Beispiel: Tabelle erzeugen package ifis.dbp03.database; import java.sql.*; public class CreateTable { public static void main(string[] args) { try { Class.forName("org.hsqldb.jdbcDriver"); String url = "jdbc:hsqldb:hsql://localhost"; Connection con = DriverManager.getConnection(url, "sa", ""); Statement stmt = con.createstatement(); String s = "Create TABLE artikel(nummer int, bez varchar(40))"; stmt.executeupdate(s); stmt.close(); con.close(); } catch (Exception e) {e.printstacktrace();} } } 16

Beispiel: Daten einfügen & lesen String s = "insert into artikel values(1, 'Milch')"; int count = stmt.executeupdate(s); System.out.println("Number of rows changed: "+count); s = "insert into artikel values(2, 'Zucker')"; count = stmt.executeupdate(s); s = "select * from artikel"; ResultSet rs = stmt.executequery(s); while (rs.next()) { int num = rs.getint(1); String bez = rs.getstring(2); System.out.println("Nummer: "+num); System.out.println("Bezechnung: "+bez); } 17

PreparedStatement Abfrageschema festlegen, bei Bedarf Parameter einsetzen Performanter als Statement (vorkompiliert) String s = "insert into artikel values(?,?)"; PreparedStatement ps = con.preparestatement(s); ps.setint(1, 30); ps.setstring(2, "Reis"); ps.executeupdate(); 18

Zuordnung Java Klassen zu SQL Datentypen CHAR, VARCHAR, LONGVARCHAR: String NUMERIC, DECIMAL: java.math.bigdecimal BIT: boolean; TINYINT: byte; SMALLINT, short; INTEGER: int, BIGINT: long REAL: float, DOUBLE: double DATE: java.sql.date TIME: java.sql.time TIMESTAMP: java.sql.timestamp 19

Zugriff auf JDBC Datentypen ResultSet: getxxx (getbigdecimal, getshort, getint, getstring...; XXX: Name des Java Typs, nicht des JDBC Typs) 1 Parameter: Spaltenname oder nummer (erste Spalte: 1,...) PreparedStatement: setxxx (setbyte, setfloat, settimestamp...) 2 Parameter: Index, Wert 20

Analyse der Ergebnismenge ResultSet rs = stmt.executequery(...); ResultSetMetaData md = rs.getmetadata(); Anzahl, Namen, Typ... der Spalten getcolumncount() getcolumnname(int col) getcolumntype(int col) isnullable(int col) 21

Metadaten über Datenbank Mit Hilfe des aktuellen Connection Objekts erzeugt: DatabaseMetaData meta = con.getmetadata() Liste aller Tabellen [gettables(...)], aller Spalten [getcolumns(...)] in einem Katalog; Liste der SQL Schlüsselworte; Name, Version des JDBC Treibers; Unterstützung bestimmter Features (z.b. subselect)... 22

Transaktionen Statements zusammen ausführen Alle ausgeführt oder zurückgesetzt JDBC Voreinstellung: autocommit Modus (COMMIT nach jedem SQL Befehl) Transaktion Unterstützung: Methoden in Connection: setautocommit(boolean), commit(), rollback() 23

Beispiel: Transaktion String s1 = "insert into address values(?,?,?); String s2 = "insert into person values(?,?,?,?); PreparedStatement addr = con.preparestatement(s1); PreparedStatement pers = con.preparestatement(s2); try { con.setautocommit(false); addr.setstring(...);...; addr.executeupdate(); pers.setint(...);...; pers.executeupdate(); con.commit(); } catch (SQLException e) { con.rollback(); } 24

Anwendungsarchitekturen 2 Schichten (Client DBMS) vs. 3 Schichten Architektur (Client Application Server DBMS) 2 Schichten: Client sendet SQL an DBMS über JDBC, erhält ResultSet zurück, verarbeitet Daten und zeigt in (G)UI an 3 Schichten: DB Zugriff durch AppServer, Client kommuniziert mit DBMS indirekt 25

2 Schichten Architektur Client: Java Applet oder Application UI & business logic beim Client Client schickt SQL an DB, manipuliert Daten direkt 26

3 Schichten Modell Client AppServer über higher level API (Server setzt Befehle in SQL um) Zugriffskontrolle Performance 27