18
JDBC -Java Database Connectivity-

JDBC

  • Upload
    shina

  • View
    25

  • Download
    0

Embed Size (px)

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

Citation preview

Page 1: JDBC

JDBC

-Java Database Connectivity-

Page 2: JDBC

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

Page 3: JDBC

30.4.2003 JDBC 3

Übersicht

• Verbindung zur DB: Interface Connection

• Anfragen formulieren: Statement• Ergebnisse auswerten: ResultSet

• Metadaten über die DB

Page 4: JDBC

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

Page 5: JDBC

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)

Page 6: JDBC

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

Page 7: JDBC

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();

Page 8: JDBC

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!

Page 9: JDBC

30.4.2003 JDBC 9

Beispiel - INSERT

stmt.execute(

"INSERT INTO coworkers

VALUES (1, 'Herbert')"

);

stmt.close();

Page 10: JDBC

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)"

);

Page 11: JDBC

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();

Page 12: JDBC

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");

Page 13: JDBC

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 (?, ?)" );

Page 14: JDBC

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();

Page 15: JDBC

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

Page 16: JDBC

30.4.2003 JDBC 16

Page 17: JDBC

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

Page 18: JDBC

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 ...