Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

1 Java Database Connectivity (JDBC) Norvald H. Ryeng

Liknende presentasjoner


Presentasjon om: "1 Java Database Connectivity (JDBC) Norvald H. Ryeng"— Utskrift av presentasjonen:

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

2 2

3 3 Denne forelesningen – Hva er Derby og Java DB? – Hva er JDBC? – Slik fungerer det – Slik gjør dere det (kokebok)

4 4 – Apache Derby er et DBMS skrevet i og for Java – Java DB er Suns distribusjon av Apache Derby – Kan kjøre som egen prosess (network server) – Kan integreres og kjøres i samme JVM som applikasjonen (embedded) – Krever at man gjør litt ekstra magi Hva er Derby og Java DB?

5 5 Derby som selvstendig tjener

6 6 Derby integrert i applikasjonen

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

8 8 De viktigste grensesnittene – java.sql.Connection Tilkobling til en databasetjener – java.sql.Statement Brukes for å utføre spørringer mot databasen – java.sql.ResultSet Resultatet av en spørring

9 9 Koble til databasetjeneren – Laste driver vha. Class.forName() Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); – Koble til med DriverManager: – Holder styr på drivere – Lager tilkoblinger (Connection-objekter) Connection conn = DriverManager.getConnection( "jdbc:derby:mindb" );

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

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

12 12 java.sql.PreparedStatement – Halvferdig spørring hvor man bare fyller ut verdier – Effektivt ved gjentatte spørringer – Sikrere – Penere kode? – Ryddigere å definere spørringen bare ett sted – Mange linjer for lite arbeid

13 13 Her daughter is named Help I'm trapped in a driver's license factory. java.sql.PreparedStatement xkcd by Randall Munroe, http://xkcd.com/327/

14 14 java.sql.PreparedStatement PreparedStatement ps = conn.prepareStatement("INSERT INTO Poststed " + "VALUES (?,?)"); ps.setInt(1, 9040); ps.setString(2, "NORDKJOSBOTN"); ps.executeUpdate(); ps.close();

15 15 java.sql.ResultSet.next() Går til neste rad. Starter før første rad, så man må kalle next() før man gjør noe annet. Returnerer true hvis det er en neste rad og false hvis det ikke er flere rader igjen..getInt(k) Leser en int fra kolonne k. k kan enten være kolonnenummeret (starter på 1) eller kolonnenavnet..getString(k) Leser en String fra kolonne k..close()

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

17 17 Spørsmål?

18 18 Kokebok

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

20 20 1. Last inn Derby-driveren Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); – Sørger for at vi kan snakke med databasetjeneren – Følger med nyere Java

21 21 2. Koble til databasen Connection conn = DriverManager.getConnection("jdbc:derby:mindb " );

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

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

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

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

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

27 27 8. Lukk Connection-objektet conn.close(); – Frigjør ressurser – Kobler fra databasetjeneren

28 28 9. Avslutt integrert Derby try { DriverManager.getConnection( " jdbc:derby:;shutdown=true " ); } catch (SQLException e) { /* alltid */ } – Skriver sjekkpunkt – Ikke nødvendig for andre DBMS N.B. Kaster alltid unntak!

29 29 Mer informasjon Java API-dokumentasjon http://java.sun.com/javase/6/docs/api/ Notater og veiledninger fra TDT4145 http://www.idi.ntnu.no/emner/tdt4145/oppskrifter/ The Java Tutorial—JDBC Database Access http://java.sun.com/docs/books/tutorial/jdbc/index.html Apache Derby Tutorial http://db.apache.org/derby/papers/DerbyTut/index.html

30 30 Spørsmål?


Laste ned ppt "1 Java Database Connectivity (JDBC) Norvald H. Ryeng"

Liknende presentasjoner


Annonser fra Google