Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."— Utskrift av presentasjonen:

1 Programmering i Java http://www.tisip.no/Javabok/ versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20 Å programmere mot en database Hva er JDBC?side 2 Databasedrivereside 3 Eksempeldatabaseside 4 Å få kontakt med databasenside 5 Sammenhengen mellom SQL datatyper, Java datatyper og getxxx()-metoderside 6 Et større eksempelside 7-8 Trelagsarkitekturside 9-11 Databaseforbindelser er en begrenset ressursside 12 Transaksjonerside 13 Kompilerte SQL-setningerside 14

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 2 Hva er Java Database Connectivity (JDBC)? JDBC er –ikke et databasesystem, men muliggjør kommunikasjon med et slikt –ikke et ”pek og klikk, dra og slipp”-verktøy som for eksempel Microsoft Access, men de som lager slike verktøy kan bruke JDBC til å kommunisere med databasen. JDBC er et API som tilbyr klasser og metoder for å sende SQL- setninger til en database, og få et resultat tilbake. Dette kapitlet forutsetter kjennskap til relasjonsdatabaser og SQL.

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 3 Databasedrivere JDBC Driver Manager JDBC-til-ODBC- driver ODBC-driver Microsoft Access Microsoft SQL Server Oracle Database Sybase Database Oracle-driverSybase-driver Java- applikasjon Java- applikasjon Java- applikasjon En databasedriver består av klasser som implementerer bestemte interface.

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 4 Eksempeldatabase create table person( persnr integer primary key, fornavn varchar(30) not null, etternavn varchar(30) not null); insert into person values (100, 'OLE', 'HANSEN'); insert into person values (101, 'ANNE GRETHE', 'ÅS'); insert into person values (102, 'JONNY', 'HANSEN'); persnrfornavnetternavn 100OLEHANSEN 101ANNE GRETHEÅS 102JONNYHANSEN

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 5 Et eksempel på kontakt med databasen public static void main(String[] args) throws Exception { String databasedriver = "oracle.jdbc.driver.OracleDriver"; Class.forName(databasedriver); // laster inn driverklassen String databasenavn = "jdbc:oracle:thin:@baron.stud.idb.hist.no:1521:orcl"; /* Leser inn brukernavn og passord */ String brukernavn = JOptionPane.showInputDialog("Brukernavn: "); String passord = JOptionPane.showInputDialog("Passord: "); Connection forbindelse = DriverManager.getConnection(databasenavn, brukernavn, passord); Statement setning = forbindelse.createStatement(); ResultSet res = setning.executeQuery("select * from person"); while (res.next()) { int persNr = res.getInt("persnr"); String fornavn = res.getString("fornavn"); String etternavn = res.getString("etternavn"); System.out.println(persNr + ": " + fornavn + " " + etternavn); } res.close(); setning.close(); forbindelse.close(); System.exit(0); } Vår databasedriver ligger på classes111.zip. C LASSPATH må inneholde classes111.zip. Denne filen inneholder bl.a. oracle.jdbc.driver.OracleDriver. byttes ut hvis annen databasedriver

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 6 Sammenhengen mellom SQL datatyper, Java datatyper og getxxx()-metoder CHAR, VARCHAR, LONGVARCHARStringgetString() NUMERIC, DECIMALjava.math.BigDecimalgetBigDecimal() BITbooleangetBoolean() TINYINTbytegetByte() SMALLINTshortgetShort() INTEGERintgetInt() BIGINTlonggetLong() REALfloatgetFloat() FLOAT, DOUBLEdoublegetDouble() BINARY, VARBINARY, LONGVARBINARYbyte[]getBytes() DATEjava.sql.DategetDate() TIMEjava.sql.TimegetTime() TIMESTAMPjava.sql.TimestampgetTimestamp()

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 7 Et større eksempel Vis programliste 20.2 side 655-660. Database finnAlle(): ArrayList endreNavn(personen: Person): boolean registrerNyPerson(fornavn: String, etternavn: String): Person slettPerson(nr: int): boolean kobleNedForbindelse(): void forbindelse: Connection

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 8 En databaseapplikasjon Vis programliste 20.3 side 661-665.

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 9 Trelagsarkitektur

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 10 De tre lagene kjører på hver sin maskin

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 11 Hver klient må ha sin egen databaseforbindelse Interface interface DatabaseForbindelseFabrikk extends Remote { Database lagForbindelse(String databasedriver, String databasenavn, String brukernavn, String passord) throws Exception; } Implementasjon public Database lagForbindelse(String databasedriver, String databasenavn, String brukernavn, String passord) throws Exception { return new DatabaseImpl(databasedriver, databasenavn, brukernavn, passord); } Oppsummering: –Databasen på baron.idb.hist.no må kjøre. –Rmi-registeret på tjener.idb.hist.no må kjøre. –Da kan tjenerprogrammet (:DatabaseTjener) på tjener.idb.hist.no startes. –Tjenerprogrammet lager objektet Persondatabase og registrerer det i rmi-registeret. –Nå kan applikasjonen på klient-PC-en starte. –Den henvender seg til rmi-registeret og ber om tilgang til Persondatabase. –Et objekt som implementerer Database-interfacet lages på oppfordring fra Persondatabase. –Applikasjonen kan nå utføre oppgaver mot databasen. Vis programliste 20.4 side 668-670

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 12 Databaseforbindelser er en begrenset ressurs Her –en bruker får tildelt en databaseforbindelse i det han starter programmet –forbindelsen holdes fram til brukeren velger å avslutte programmet –brukbart dersom antall brukere er relativt få Dersom antall brukere er mange –en pool av databaseforbindelser –“connection pooling” en del av JDBC 2.0 –sjekk [URL-Databasedrivere] for drivere som tilbyr nå denne tjenesten –hver henvendelse til databasen begynner med å reservere en forbindelse som ikke holdes lenger enn nødvendig

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 13 Transaksjoner En transaksjon er en logisk enhet med arbeid og kan bestå av flere oppdateringssetninger mot databasen. Eksempel: Dersom penger skal overføres fra én konto til en annen er det viktig at begge kontoene endrer saldo. Dersom en feil inntreffer kan vi ikke risikere at bare en av kontoene har endret saldo. OK gjennomført transaksjon: Stadfest! (commit) Ikke ok gjennomført transaksjone: Rull tilbake! (rollback) Hver SQL-setning er en transaksjonsenhet. Interfacet Connection gir oss mulighet til å lage transaksjoner som består av mer enn en SQL-setning –public void setAutoCommit(boolean autocommit) // standard er true –public void commit() –public void rollback() Vis programliste 20.5 side 672-673.Gjør oppgaven side 674.

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk 2003. Kapittel 20, side 14 Kompilerte SQL-setninger Java-programmet sender SQL-setningen til databasesystemet. Databasesystemet kompilerer setningen og setter opp en plan for mest mulig effektivt søk i databasen. Unødvendig å kompilere på nytt dersom bare konstantverdier byttes ut: –select * from person where fornavn like ”Anne” and etternavn like ”Olsen”; –select * from person where fornavn like ”Ulf” and etternavn like ”Hansen”; Vi kan lage et ferdig kompilert setningsobjekt ved å bruke klassen PreparedStatement. Eksempel: String sqlSetning = "select * from person where fornavn like ? and etternavn like ?"; PreparedStatement setning = forbindelse.prepareStatement(sqlSetning); setning.setString(1, ”Anne”); // Søkekriteriene kan selvfølgelig leses inn, setning.setString(2, ”Olsen”); // se programliste 20.6 side 674-675. ResultSet res = setning.executeQuery(); while (res.next()) { …osv….


Laste ned ppt "Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."

Liknende presentasjoner


Annonser fra Google