Anwendungssysteme Programmierung mit DBS Datenbanksysteme Anbindung mit Java Name: Datum: Klasse: Blatt Nr.: 1/2 Lfd. Nr.: Die Anbindung von Java-Programmen an Datenbanken wird durch eine Datenbankschnittstelle in der Programmiersprache Java realisiert. Diese ist die Java Database Connectivity (JDBC) und ermöglicht eine einheitliche Schnittstelle für die relationalen Datenbanken unterschiedlichster Hersteller. Zu den Aufgaben von JDBC gehört es, Datenbankverbindungen aufzubauen und zu verwalten, SQL-Anfragen an die Datenbank weiterzuleiten und die Ergebnisse in eine für Java nutzbare Form umzuwandeln und dem Programm zur Verfügung zu stellen. Für jede spezifische Datenbank sind eigene Treiber erforderlich, die die JDBCSpezifikation(API) implementieren. Diese Treiber werden meist vom Hersteller des Datenbanksystems geliefert. Das heißt, dass jede Datenbank für die der Hersteller ein Treiber geschrieben hat exakt gleich in Java angesprochen werden kann.1 Programmierung mit JDBC Klassen und Interfaces der JDBC-Schnittstelle sind im Paket java.sql enthalten. Der DriverManager ist der Kern der Verwaltung. Dieser wird benutzt um Verbindungen zu einer Datenbank aufzubauen. Die Connection repräsentiert die Verbindung zu einer Datenbank und kann SQL-Anweisungen ausführen. Die SQLAnweisungen sind in Statements gekapselt und bekommen nach Ausführung ein Objekt der Klasse ResultSet zurück. Abbildung 1: Klassenübersicht JDBC Tutorial für die Datenbankanbindung Eine Datenbankanbindung kann immer Fehler auslösen. Daher wird durch Typischer Ablauf die JDBC-Schnittstelle im Fehlerfall eine Exception ausgelöst. Diese muss Registrierung des JDBCabgefangen werden indem alle Anweisungen, die mit eine solche Treibers beim Treibermanager Ausnahme auslösen können in einen s.g. try-catch-Block geschrieben Verbindungsaufbau zum werden. Datenbanksystem Java-Beispiel: … Erstellung des Statements try{ Ausführung des Statements //Code der Exceptions auslösen kann Abfrage der Ergebnisse }catch (Exception e){ Verarbeitung der Ergebnisse e.printStackTrace(); Schließen der Verbindung } Treiberregistrierung String driver = "com.mysql.jdbc.Driver"; //MySQL Class.forName(driver);2 Mit der statischen Methode Class.forName wird der Treiber automatisch geladen und steht im DriverManager zur Verfügung um eine Connection zu erzeugen. Nutzer in Datenbanksystem anlegen Treiberübersicht MySQL "com.mysql.jdbc.Driver" Oracle "oracle.jdbc.driver.OracleDriver" Mircosoft "sun.jdbc.odbc.JdbcOdbcDriver" SQlite "org.sqlite.JDBC" Über phpMyAdmin SQL CREATE USER 'username'@'localhost' IDENTIFIED BY 'mypass'; Verbindungsaufbau String url = "jdbc:mysql://localhost/test?"; String user = "username"; String password = "mypass"; ... Connection con; //Objekt welches die Kommunikation durchführt con = DriverManager.getConnection(url, user, password); //Objekterzeugung 1 2 http://dev.mysql.com/downloads/connector/j/ + https://jaxenter.de/mysql-und-java-jdbc-einrichten-8180 Class.forName(driver).newInstance(); //wird von MySQL empfohlen ©Tenbusch Anwendungssysteme Programmierung mit DBS Datenbanksysteme Anbindung mit Java Name: Datum: Klasse: Blatt Nr.: 2/2 Lfd. Nr.: Einfache Abfragen Abfragen die ein Ergebnis zurückliefern werden mit der Methode executeQuere() ausgeführt. Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM titel"); //Statement erzeugen //SQL-Abfrage ausführen while(rs.next()) { System.out.println(rs.getString("name")); } //solange Ergebniszeilen //Zelleneintrag ausgeben con.close(); // Verbindung schließen DDL & DML-Operationen SQL-Abfragen, die kein Ergebnis zurückliefern sollen werden mit der Methode executeUpdate(sql) auf einem Statementobjekt ausgeführt. Beispiel-Code import import import import java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.Statement; public class Verbindungstest { public static void main(String[] args) { try { // Parameter für Verbindungsaufbau definieren String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost/test?"; String user = "testuser"; String password = "strenggeheim"; // JDBC-Treiber laden Class.forName(driver); // Verbindung aufbauen Connection con; con = DriverManager.getConnection(url, user, password); // SQL-Anweisungen ausführen Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM titel"); // Ergebnis abfragen while (rs.next()) { System.out.println(rs.getString("name")); } // Verbindung schließen con.close(); } catch (Exception ex) { // Fehler abfangen ex.printStackTrace();// Fehlermeldung ausgeben } } } Wichtig! Geht nur wenn der richtige Benutzer das richtige Passwort die Datenbank Test hat eine Tabelle Titel mit einer Spalte Name und Einträge MySql ist gestartet ©Tenbusch