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

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
C++ for Java-programmerere
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
LC238D Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, uke 45 Transaksjoner og flerbrukerproblematikk.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Databasehåndtering med MySQL
C# for javaprogrammerere
En gang til!? .
Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, uke 44 Å programmere databasetjeneren – JavaDB.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 11 Applet’s Hva karakteriserer applet’sside.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
Sqlite Et lite eksempel på en SQL- database. SQL kan startes på ulike måter Kommandolinjeversjon or Windows –Programmet må innstalleres Hentes fra
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
Java 11 Programmering med og uten objekter: hva er forskjellen?
KAP. 12 Hypertext Implementasjon Roy Kjellid & Tor Andre Kvinge Inf 329.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Programmering i Java tilpasset undervisning våren 2009 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Variabler, datatyper og uttrykk
Utskrift av presentasjonen:

Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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 Databaseforbindelser, lage egen poolside 9-10 Trelagsarkitektur, bruke poolenside Transaksjonerside 18 JDBC2side 19 Kompilerte SQL-setningerside 20

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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 = String brukernavn = showInputDialog("Brukernavn: "); String passord = 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(); } 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 eller database

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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()

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

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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 9 Databaseforbindelser er en krevende 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 –hver henvendelse til databasen begynner med å reservere en forbindelse som ikke holdes lenger enn nødvendig –“connection pooling” en del av JDBC 2.0 sjekk [URL-Databasedrivere] for drivere som tilbyr denne tjenesten krever at Java navne- og katalogtjeneste (JNDI) kjører, ikke aktuelt for oss –vi lager vår egen pool

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 10 DatabasePool +reserverForbindelse +frigiForbindelse +lukkAlleForbindelser Forbindelse settLedig lukkForbindelse +finnNr +finnForbindelse +erLedig -kapasitet -dbNavn -brukernavn -passord -nr -dbForb -ledig 1 * pakke- tilgang Vår egen pool av databaseforbindelser En databasepool består av et sett med databaseforbindelser Forbindelsene opprettes i konstruktøren (ikke vist på figuren) Forbindelsene koples ned ved kall på lukkAlleForbindelser( ), i profesjonelle systemer koples de ofte ned på timeout. Vis programliste 20.4 side

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

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 12 Klienter deler databasepoolen

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 13 Fjernobjekt som tildeler en databasewrapper En fabrikk tildeler databaseobjekter Fabrikken registreres i rmi- registeret Grensesnitt: public interface DbWrapperFabrikk extends Remote { Database lagDbWrapper() throws RemoteException; } Implementasjon: public class DbWrapperFabrikkImpl extends UnicastRemoteObject implements DbWrapperFabrikk { private DatabasePool dbPool; private int feilkode; // brukes i registrerNyPerson() // i klassen DatabaseImpl public DbWrapperFabrikkImpl( int poolKapasitet, String dbDriver, String dbNavn, String brukernavn, String passord,int startFeilkode) throws Exception { dbPool = new DatabasePool( poolKapasitet, dbDriver, dbNavn, brukernavn, passord); feilkode = startFeilkode; } public Database lagDbWrapper() throws RemoteException { return new DatabaseImpl(dbPool, feilkode); } /* Denne metoden er ikke med i interfacet, men brukes av tjenerprogrammet */ public void stengDatabasePool() { dbPool.lukkAlleForbindelser(); }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 14 Databasewrapperen Grensesnitt: public interface Database extends Remote { ArrayList finnAlle() throws RemoteException; boolean endreNavn(Person personen) throws RemoteException; Person registrerNyPerson(String fornavn, String etternavn) throws RemoteException; boolean slettPerson(int nr) throws RemoteException; } Implementasjonen ligner på klassen Database (side 722ff.), men databaseforbindelser reserveres og frigis i hver enkelt metode, se eksempel på metode på neste lysbilde public class DatabaseImpl extends UnicastRemoteObject implements Database { private DatabasePool dbPool; private int kode; // Returkode fra databasesystemet ved primærnøkkelkonflikt public DatabaseImpl(DatabasePool startDbPool, int startKode) throws RemoteException { dbPool = startDbPool; kode = startKode; }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 15 Metode som bruker databasepoolen Metoden ligger i klassen DatabaseImp (forts. fra forrige lysbilde) public ArrayList finnAlle() throws RemoteException { ArrayList alle = new ArrayList (); String sqlsetning = "select persnr, initcap(fornavn) as fn, initcap(etternavn) as en " + "from person order by etternavn, fornavn"; Forbindelse forbindelse = null; ResultSet res = null; Statement setning = null; try { forbindelse = dbPool.reserverForbindelse(); setning = forbindelse.finnForbindelse().createStatement();... finner data og fyller opp tabell-listen, se klassen Database … } finally { // setningene nedenfor utføres alltid lukkResSet(res); lukkSetning(setning); dbPool.frigiForbindelse(forbindelse.finnNr()); return alle; }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 16 Tjenerprogrammet class DatabaseTjener { public static void main(String[] args) throws Exception { String dbDriver = "oracle.jdbc.driver.OracleDriver"; String dbNavn = String brukernavn = showInputDialog("Brukernavn: "); String passord = showInputDialog("Passord: "); int feilkode = 1; // Oracle feilkode for duplikate primærnøkkelverdier int poolKapasitet = 3; DbWrapperFabrikkImpl db = new DbWrapperFabrikkImpl(poolKapasitet, dbDriver, dbNavn, brukernavn, passord, feilkode); Naming.rebind("Persondatabase", db); showMessageDialog(null, "Nå er databasepoolen oppe. Trykk Ok når den skal stenges."); db.stengDatabasePool(); // NB! System.exit(0); }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 17 De tre lagene kjører på hver sin maskin Kompiler og kjør som forklart under figuren på side 742.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 18 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 Gjør oppgaven side 746.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 19 JDBC2 Utvidete muligheter i ResultSet –Metoder merket 1.2 i API-dokumentasjonen (siste avsnitt i deltaljbeskrivelsen er ”Since: 1.2”) krever en JDBC2-driver (Oracle: ojdbc14.jar) –Kan flytte deg framover og bakover. –Kan legge inn nye rader, oppdatere data og slette rader i databasen via resultatsettet, men executeUpdate( ) er vanligvis mer effektivt Mange oppdateringssetninger kan samles og sendes til databasesystemet som en pakke (”batch”): for (int nr = 2001; nr < 2010; nr++) { String sql = "insert into person values(" + nr + ", 'Ola', 'Nordmann')"; System.out.println(sql); setning.addBatch(sql); } int[] antall = setning.executeBatch(); Les mer i for eksempel Gjør oppgavene side

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 20, side 20 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 ResultSet res = setning.executeQuery(); while (res.next()) { …osv….