Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse Transaksjonshåndtering LC191D Videregående programmering Semesterplan: Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring Else Lervik, februar 2012
Å lage sikre klasser (kap. 6.5, side ) Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting Argumenter bør kontrolleres Øving 3, klassen Rom public boolean leggInnNyReservasjon(Tidspunkt fraTid, Tidspunkt tilTid, String navn, String tlf, int antPers) { Kontroller argumentene, dog begrensede krav til testing i dette kurset Klienten kan, men behøver ikke, være et objekt av klassen konferansesenter Tilbakemelding om feil gis fortrinnsvis via returverdien: Forelesning 6, side 2
Å lage sikre klasser, forts. Når kan vi ikke bruke returverdien? Hva gjør vi da? Forelesning 6, side 3
Eksempel på håndtering av unntak Lag kode som leser inn heltall fra brukeren via showInputDialog() Gi tilbakemelding dersom ugyldig tall Forelesning 6, side 4 Vis klassen mittBibliotek.DataLeser, side
Unntaksklassene i Java-API-et Forelesning 6, side 5 figur side 498 Denne typen unntak skal sjelden håndteres.
RuntimeException, eksempler Mange av disse unntakene unngås med enkle if-tester ArrayIndexOutOfBoundsException if (indeks >= 0 && indeks < arraylist.size()) … if (indeks >= 0 && indeks < tabell.length) … NullPointerException if (referanse != null) …. ArithmeticException if (nevner != 0) …. Unntakshåndtering skal ikke brukes som alternativ til en if-setning Forelesning 6, side 6
Behov for unntakshåndtering i databasesammenheng? Forelesning 6, side 7
try-catch-finally-setningen, eksempel Syntaks try { setninger } catch (parameter) { // mer spesifikke unntak foran mer generelle setninger } catch (parameter) { setninger …. } finally { // utføres alltid, også ved return (kun et unntak: System.exit()) (kan sløyfes) setninger } Programmering av unntakshåndtering i databasesammenheng Skisser kode med fullstendig unntakshåndtering: DatabaseKontaktMedExc.java Vis tilsv. kode der unntakshåndteringen er flyttet ut i en klasse DatabaseKontaktMedExc2.java Opprydder.java, programliste 24.3, side Forelesning 6, side 8
Trelagsarkitektur Forelesning 6, side 9 figur side 844
Egen klasse for databasehåndteringen Forelesning 6, side 10 figur side 825, kode side , fil Database.java
Transaksjonshåndtering Tabellen konto create table konto( kontonr varchar(15) not null, navn varchar(30) not null, saldo decimal not null, primary key (kontonr)); insert into konto values ('12345', 'Ole Pettersen', 5250); insert into konto values ('34567', 'Ole Pettersen', 3456); insert into konto values ('45632', 'Ingrid Bø', 1000); Vis kode, Transaksjonstest.java, side Øving 6 Egen klasse for databaseoperasjoner mot databasen fra øving 5 Transaksjonshåndtering nødvendig i noen av metodene Forelesning 6, side 11