Java Database Connectivity (JDBC) Norvald H. Ryeng [email protected]

24
1 Java Database Connectivity (JDBC) Norvald H. Ryeng [email protected]

description

Java Database Connectivity (JDBC) Norvald H. Ryeng [email protected]. 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 [email protected]

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

1

Java Database Connectivity (JDBC)

Norvald H. [email protected]

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

2

Avlyst forelesning

Forelesningen torsdag 1. februar er avlyst

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

3

Denne forelesningen

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

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

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

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

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

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

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

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

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

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

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

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

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

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

10

java.sql.PreparedStatement

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

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

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

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

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

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

}

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

13

Kokebok

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

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.

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

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

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

16

2. Koble til databasen

Connection conn =

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

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

"passord");

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

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)

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

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

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

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

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

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.

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

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.

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

22

8. Lukk Connection-objektet

conn.close();

– Frigjør ressurser– Kobler fra databasetjeneren

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

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

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

24

Spørsmål?