Java Database Connectivity (JDBC) Norvald H. Ryeng ryeng@idi.ntnu.no

Post on 16-Jan-2016

51 views 0 download

description

Java Database Connectivity (JDBC) Norvald H. Ryeng ryeng@idi.ntnu.no. Avlyst forelesning. Forelesningen torsdag 1. februar er avlyst. Denne forelesningen. Hva er JDBC? Slik fungerer det Slik gjør dere det (kokebok) :-). Hva er JDBC?. Vanligste måte å bruke databaser i Java - PowerPoint PPT Presentation

Transcript of Java Database Connectivity (JDBC) Norvald H. Ryeng ryeng@idi.ntnu.no

1

Java Database Connectivity (JDBC)

Norvald H. Ryengryeng@idi.ntnu.no

2

Avlyst forelesning

Forelesningen torsdag 1. februar er avlyst

3

Denne forelesningen

– Hva er JDBC?– Slik fungerer det– Slik gjør dere det (kokebok) :-)

4

Hva er JDBC?

– Vanligste måte å bruke databaser i Java– Følger med JRE og JDK (java.sql.*)– Uavhengig av DBMS (krever driver)– Spørringer skrives i SQL

5

De viktigste grensesnittene

– java.sql.ConnectionTilkobling til en databasetjener

– java.sql.StatementBrukes for å utføre spørringer mot databasen

– java.sql.ResultSetResultatet av en spørring

6

Koble til databasetjeneren

– Laste driver vha. Class.forName()Class.forName("oracle.jdbc.driver.OracleDriver");

– Koble til med DriverManager:– Holder styr på drivere

– Lager tilkoblinger (Connection-objekter)

Connection conn = DriverManager.getConnection(url, brukernavn, passord);

URL til databasen ELEFANT på IDIs Oracle-tjener:jdbc:oracle:thin:@elefant.idi.ntnu.no:1521:ELEFANT

7

java.sql.Connection

.createStatement()Lag et Statement-objekt

.prepareStatement(…)Lag en halvferdig spørring

.setAutoCommit(…)Commit etter hver executeQuery/executeUpdate? (Standard: ja)

.commit()

.rollback()

.close()

8

java.sql.Statement

.executeUpdate("INSERT INTO tabell VALUES (…)")Utfører en operasjon som ikke returnerer noe resultat (f.eks.

INSERT og UPDATE). Returnerer antall rader som påvirkes.

.executeQuery("SELECT * FROM tabell")Utfører en spørring og returnerer et ResultSet med svar på

spørringen.

.close()

9

java.sql.PreparedStatement

– Halvferdig spørring hvor man bare fyller ut verdier– Effektivt ved gjentatte spørringer– Penere kode?

– Ryddigere å definere spørringen bare ett sted

– Mange linjer for lite arbeid

10

java.sql.PreparedStatement

PreparedStatement ps =conn.prepareStatement("INSERT INTO Poststed " +"VALUES (?,?)");

ps.setInt(1, 9040);ps.setString(2, "NORDKJOSBOTN");ps.executeUpdate();ps.close();

11

java.sql.ResultSet

.next()Går til neste rad. Starter før første rad, så man må kalle next()

førman gjør noe annet. Returnerer true hvis det er en neste rad ogfalse hvis det ikke er flere rader igjen.

.getInt(k)Leser en int fra kolonne k. k kan enten værekolonnenummeret (starter på 1) eller kolonnenavnet.

.getString(k)Leser en String fra kolonne k.

.close()

12

java.sql.SQLException

– Unntak som kastes dersom Noe™ går galt– Må fanges og håndteres– Løsning: sett alle JDBC-operasjoner innenfor try{…}:

try {

// JDBC-kode

} catch (SQLException e) { // Ev. catch (Exception e)

e.printStackTrace();

}

13

Kokebok

14

0. Importer java.sql.*

import java.sql.*;

Importerer JDBC-pakken inn i navnerommet, slik at

man slipper å skrive java.sql. foran alle klasse- og

grensesnittnavn.

15

1. Last inn Oracle-driveren

Class.forName("oracle.jdbc.driver.OracleDriver");

– Sørger for at vi kan snakke med databasetjeneren– Installert på IDIs datamaskiner– Tilgjengelig fra IDIs Oracle-tjener:

http://elefant.idi.ntnu.no/programvare/oracle9.jar

16

2. Koble til databasen

Connection conn =

DriverManager.getConnection("jdbc:oracle:thin:" +

"@elefant.idi.ntnu.no:1521:ELEFANT", "brukernavn",

"passord");

17

3. Lag et Statement-objekt

Statement stmt = conn.createStatement();

– Sørger for å sende SQL-setninger til databasetjeneren.

– Kan sende spørringer som returnerer resultat (SELECT)

– Kan sende spørringer som ikke returnerer resultat (INSERT, DELETE)

18

4. Utfør spørringen

ResultSet rs = stmt.executeQuery("SELECT * " +

"FROM Poststed WHERE Sted='TRONDHEIM' ");

Merk:– Ikke semikolon på slutten av spørringen– Apostrof rundt tekststrenger

19

5. Les resultatet

while (rs.next()) {System.out.print(rs.getInt(1));System.out.print(' ');System.out.println(rs.getString(2));

}

– getXxx() finnes for de viktigste datatypene– Tar kolonnenummer eller –navn som parameter

20

6. Lukk ResultSet-objektet

rs.close();

– Frigjør ressurser– Veldig viktig!– Hvis man har for mange ResultSet-objekter oppe, vil

man få en feil når man utfører neste spørring.

21

7. Lukk Statement-objektet

stmt.close();

– Frigjør ressurser– Et Statement-objekt kan brukes flere ganger

Dvs. at man kan kjøre .executeQuery() og .executeUpdate() flere ganger med samme Statement-objekt.

– Hvorfor ha flere Statement-objekter?Man kan kun ha ett ResultSet-objekt åpent for hvert Statement-objekt.

22

8. Lukk Connection-objektet

conn.close();

– Frigjør ressurser– Kobler fra databasetjeneren

23

Mer informasjon

Java API-dokumentasjonhttp://java.sun.com/j2se/1.5.0/docs/api/

Notater og veiledninger fra TDT4145http://www.idi.ntnu.no/emner/tdt4145/oppskrifter/

The Java Tutorial—JDBC Database Accesshttp://java.sun.com/docs/books/tutorial/jdbc/index.html

24

Spørsmål?