JDBC

Post on 06-Jan-2016

24 views 0 download

description

JDBC. -Java Database Connectivity-. JDBC. .. verbindet Java-Programme mit SQL-basierten Datenbanken .. liefert eine generische SQL-API für eine Vielzahl von DB-Systemen .. ist für Programmierer (fast) transparent .. findet sich im Package java.sql. Übersicht. - PowerPoint PPT Presentation

Transcript of JDBC

JDBC

-Java Database Connectivity-

30.4.2003 JDBC 2

JDBC ..

• .. verbindet Java-Programme mit SQL-basierten Datenbanken

• .. liefert eine generische SQL-API für eine Vielzahl von DB-Systemen

• .. ist für Programmierer (fast) transparent

• .. findet sich im Package java.sql

30.4.2003 JDBC 3

Übersicht

• Verbindung zur DB: Interface Connection

• Anfragen formulieren: Statement• Ergebnisse auswerten: ResultSet

• Metadaten über die DB

30.4.2003 JDBC 4

JDBC-Treiber

• zunächst wird ein DB-spezifischer JDBC-Treiber geladenDriverManager.registerDriver(new oracle.jdbc.OracleDriver());

• DB-Systeme liefern i.d.R. passende JDBC-Treiber mit, wenige sind frei verfügbar

30.4.2003 JDBC 5

JDBC-Treiber

• Einbindung des Treibers auch zur Laufzeit möglich> java -Djdbc.drivers=

oracle.jdbc.OracleDriver myClass

• (für manche Systeme gibt es nur ODBC-Treiber, aber zum Glück auch die JDBC-ODBC-Bridge)

30.4.2003 JDBC 6

Verbindung zur DB

• die eigentliche Verbindung stellt die Klasse DriverManager her:Connection con = DriverManager.getConnection(URL, username, password);

• URL = JDBC-Connect-String• sämtliche Anfragen an die DB behandelt

dann die Instanz des Interfaces ConnectionURL = jdbc:oracle:thin:@141.20.27.142:1521:LEHRE

30.4.2003 JDBC 7

Statements

• sind gewöhnliche SQL-Statements, die JDBC an die DB weiterleitet

• erzeugt wird ein Statement über das Interface ConnectionStatement stmt =

con.createStatement();

30.4.2003 JDBC 8

Beispiel - CREATE

• Ausführung vonstmt.execute(

"CREATE TABLE coworkers(

c_id int,

name varchar(25))"

);• kein ';' am Ende des Statements!

30.4.2003 JDBC 9

Beispiel - INSERT

stmt.execute(

"INSERT INTO coworkers

VALUES (1, 'Herbert')"

);

stmt.close();

30.4.2003 JDBC 10

Queries

• Ausführung von SELECT-Statements über Statement.executeQuery(), was ein Objekt des Interfaces ResultSet erzeugtResultSet result =

stmt.executeQuery(

"SELECT c_id, name FROM

coworkers ORDER BY c_id)"

);

30.4.2003 JDBC 11

ResultSet

• zurückgelieferte Tupel nimmt eine Instanz von ResultSet auf

• die Ergebnisse werden tupelweise durchlaufen über die Methode result.next();

• bereits das erste Tupel bedarf des Einstiegs mit result.next();

30.4.2003 JDBC 12

Zugriff auf ResultSet

• über die MethodenResultSet.getXXX("<attrib>")

• also getString(), getInt()

stmt.executeQuery("SELECT c_id,name ..

while(result.next()) {

int c_id = result.getInt("c_id");

String name = result.getString("name");

30.4.2003 JDBC 13

Prepared Statements

• für mehrfache Abarbeitung und wenn die DB vorbereitete Anweisungen unterstützt

• anstelle von StatementPreparedStatement pstmt = con.prepareStatement( "INSERT INTO coworkers (c_id, name) VALUES (?, ?)" );

30.4.2003 JDBC 14

Prepared Statements

{LOOP}// prepare tuples:// integer as 1st attribute:pstmt.setInt(1, anInt);

// string as 2nd attribute:pstmt.setString(2, aString);

// execute prepared statementpstmt.execute();

{POOL}pstmt.close();

30.4.2003 JDBC 15

getXXX-Methodenget-Methode SQL-Typ

getInt INTEGER

getString CHAR, VARCHAR

getLong BIG INT

getFloat REAL

getDouble FLOAT

getBoolean BIT

getDate, getTime DATE, TIME

getInt INTEGER

getObject jeder Typ

30.4.2003 JDBC 16

30.4.2003 JDBC 17

SQLExceptions

• "Geschlossene Anweisung"– Wo? Statement.execute()– Was? Es wird auf ein Instanz von

Statement zugegriffen, die zuvor mit Statement.close() geschlossen wurde

– Und jetzt? Erst später schließen oder neu instanziieren

30.4.2003 JDBC 18

SQL-Exceptions 2

• "ORA-00001: Verstoß gegen Eindeutigkeit"– Wo? Statement.execute("INSERT ..");– Was? Einfügen bereits vorhandener

Werte in eine als unique/primary key deklarierte Spalte

– Und jetzt? Altes Tupel überschreiben oder anderer Wert ...