Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, uke 44 Å programmere databasetjeneren – JavaDB.

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

Hans Olav Norheim
Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
C++ for Java-programmerere
LC238D Datamodellering og databaser Else Lervik, september 2012 Forelesning 6, Uke 39 Objektorientering i ER-modeller.
Programmering i ActionScript - hva er det, og hvordan undervise?
Høgskolen i Oslo Webprogrammering SQL og databaser del 3.
Java database persistence framework.  SELECT by FROM postnr AS p WHERE ( SELECT DISTINCT postnr FROM addr AS a WHERE user.adrId = a.Id ) = p.postnr;
LC238D Datamodellering og databaser Introduksjon til fagfeltet Else Lervik, august 2012Forelesning 1, uke 34 Datafilerside.
Kontrollstrukturer (Kapittel 3)
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Avansert SQL og problemløsning
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.
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Datamodellering og databaser Else Lervik, oktober 2011 Forelesning 9, uke 41 SQL, del 2 Eksempelbaseside 2 Virtuelle.
Objektorientert programmering i PHP del 2
LC238D Datamodellering og databaser Else Lervik, november 2012 Forelesning 12, uke 45 Transaksjoner og flerbrukerproblematikk.
IS-102 Klassedefinisjoner
Databasehåndtering med MySQL
C# for javaprogrammerere
En gang til!? .
ANDROID-PROGRAMMERING VÅREN ACTIVITY OG INTENTS Repetisjon fra forrige gang.
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
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.
Siste forelesning ER/EER-modellering
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
LC238D Datamodellering og databaser Else Lervik, september 2011 Forelesning 6, Uke 38 Objektorientering i ER-modeller.
Sqlite Et lite eksempel på en SQL- database. SQL kan startes på ulike måter Kommandolinjeversjon or Windows –Programmet må innstalleres Hentes fra
SQLHiA DAT 2800 Databaser I Prosedyrer / Triggere.
SQLHiA Transaksjoner. SQLHiA TransaksjonDefinisjon En transaksjon er en serie av en eller flere SQL-statement som til sammen danner en logisk enhet. Med.
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 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 januar 2005 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.
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Høgskolen i Oslo Web-programmering Feilhåndtering i PHP.
Structured Query Language Kræsj-kurs
Høgskolen i Oslo Webprogrammering Ajax og PHP. I dag l Hvordan få en bedre brukeropplevelse via Ajax- script l Gjennomgang av kode l Oppgaveløsning på.
Triggere Mutasjoner i basen. Triggers Triggers are stored procedures that execute automatically when something (event) happens in the database: : data.
Eksempel på SQL ”SQL-setninger” har en struktur som likner på ”naturlig språk”, med ”verb, subjekter og adjektiver”. SQL-setningene begynner alltid med.
Dynamiske nettsider PHP Del 4 – Eksterne datakilder.
Java 11 Programmering med og uten objekter: hva er forskjellen?
KAP. 12 Hypertext Implementasjon Roy Kjellid & Tor Andre Kvinge Inf 329.
Linq To SQL Fagdag 20. November DataContext  DataContexten er mappingen mot databasen –Generer objekter for alle entiteter (tabeller), med properties.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
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.
Se ellers læreboka, kap , side
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.
INF Objektorientert programmering
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.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
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.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
Upload av bildefiler Utdrag fra ImageIn Ved Kirsten Klæbo Tirsdag 25/11-03.
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
Inf1000 (Uke 5) Arrayer, filer og tekst
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Utskrift av presentasjonen:

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, uke 44 Å programmere databasetjeneren – JavaDB Programkoden ligger i databasen: hva, hvorfor og hvordanside 2-5 Hallo til verden (eksempel)side 6 CallSpec’sside 7 CREATE PROCEDUREside 8-9 CREATE FUNCTIONside Å kalle prosedyrer og funksjonerside 12 Unntakshåndtering i JDBC-programmering (repetisjon)side Databaseprogrammering hos tjenerenside 15 Triggereside Ut- og inn/ut-parametre i prosedyrer, kall fra Java-programside 20 På fagets hjemmeside finner du URL’er som er benyttet ved utarbeidelse av denne forelesningen.

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 2 Programkoden ligger i databasen Vi bruker JavaDB som eksempel, men liknende muligheter fins også i andre dbms. Ofte proprietært språk eller C. Kan bruke Java og JDBC i JavaDB og Oracle. Databasen består av: tabeller med data views prosedyrer funksjoner triggere klientapplikasjon1 klientapplikasjon2 klientapplikasjon3 tjener- programmet mot databasen

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 3 Ulike typer programmer Lagrede prosedyrer og funksjoner –kalles eksplisitt –prosedyrer svarer til Java-metoder uten returtype (void) –funksjoner svarer til Java-metoder med returtype –ikke objektorientert bare klassemetoder behovet for ut- og inn/ut-argumenter kan oppstå Triggere –kan være prosedyre eller funksjon –kalles automatisk (”trigges”) når en hendelse inntreffer before statement before row (insert, update, delete) after row (insert, update, delete) after statement

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 4 Hvorfor lagre programkode i databasen? Økt ytelse –kort vei (ikke over nettverket) til databasetabellene Produktivitet –kompliserte prosedyrer, som for eksempel kontroll av fødselsnr eller KID-nr ligger lagret én plass

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 5 Hvordan lagre Java-kode i databasen? Databasen må på forhånd inneholde et ”skjema”, dvs tabeller Alt på denne siden som er i kursiv er eksempler og må tilpasses din situasjon Klassene som skal brukes må være offentlige med offentlige klassemetoder (public static...) Kompiler klassene Legg klassene i en jar-fil –jar cf TjenerEks.jar *.class Start opp databasen du vil legge koden i, f.eks. som en forbindelse i NetBeans Kjør følgende fra kommandolinjen, f.eks. i NetBeans –Installer jar-filen i databasen CALL SQLJ.INSTALL_JAR('D:/data/db/db11/tjenerprog/TjenerEks.jar', 'APP.test2', 0); Observer at det i databasekatalogen nå ligger en fil med navn (eksempel) jar/APP/test2.jar.G –Sett opp classpath for Derby slik at systemet finner java-klassene i den nevnte jar-filen CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY ('derby.database.classpath', 'APP.test2'); –Ofte (spesielt under utvikling) må jar-filen reinstalleres pga endringer, da brukes CALL SQLJ.REPLACE_JAR('D:/data/db12/tjenerprog/TjenerEks.jar', 'APP.test2'); –Jar-filen kan fjernes fra databasen slik: CALL SQLJ.REMOVE_JAR('test2', 0);

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 6 Hallo til verden fra databasesystemets indre Lag filen Hallo.java på vanlig måte: public class Hallo { public static String hallo() { return "Hallo til verden fra det indre av databasen"; } Kompiler filen og lag jar-fil Last opp klassen, se forrige side –CALL SQLJ.INSTALL_JAR(.... Publiserer Java-metoden med følgende setning –CREATE PROCEDURE hallo() LANGUAGE JAVA EXTERNAL NAME 'Hallo.hallo' PARAMETER STYLE JAVA; Så kan vi prøve prosedyren: –CALL hallo(); Prøv ut med parameter (hallo2()) (se programkode) –CALL hallo2(’Bjarne’); Prøv ut som funksjon (hallo3()) (se programkode) –VALUES hallo3(’Anne’); –SELECT hallo3(person.fornavn) FROM PERSON; Hallo.java, se eksempelsamlingen

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 7 CallSpec Java-metoder (kun public static metoder, klassemetoder) publiseres via CallSpec’s: –void-metoder: CREATE PROCEDURE –ikke-void-metoder: CREATE FUNCTION CallSpec-en er bindeleddet mellom SQL og Java Applikasjoner bruker navnet som er definert i CallSpec’en Ved kall slår kjøresystemet opp i datakatalogen og finner CallSpec’en Java-metoden utføres Kan laste opp nye utgaver av Java- klassene uten at CallSpec-scriptet behøver å kjøres på nytt

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 8 Syntaks CREATE PROCEDURE CREATE PROCEDURE procedure-Name ( [ ProcedureParameter [, ProcedureParameter] ] *) [ ProcedureElement ] * ProcedureParameter: [ { IN | OUT | INOUT } ] [ parameter-Name ] DataType ProcedureElement: { | [ DYNAMIC ] RESULT SETS INTEGER | LANGUAGE { JAVA } | EXTERNAL NAME string | PARAMETER STYLE JAVA | { NO SQL | MODIFIES SQL DATA | CONTAINS SQL | READS SQL DATA } } Alle datatyper i hht databasesyntaks (ikke Javasyntaks) dersom ingenting oppgis, gjelder IN fullstendig navn på Java-metoden dersom ingenting oppgis, gjelder MODIFIES SQL DATA obliga- torisk

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 9 Prosedyreeksempler CREATE PROCEDURE SALES.TOTAL_REVENUE( IN S_MONTH INTEGER, IN S_YEAR INTEGER, OUT TOTAL DECIMAL(10,2)) PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME 'com.acme.sales.calculateRevenueByMonth‘; CREATE PROCEDURE SEND_MAIL( TO_ADDRESS VARCHAR(320), SUBJECT VARCHAR(320), BODY VARCHAR(32000)) LANGUAGE JAVA PARAMETER STYLE JAVA NO SQL EXTERNAL NAME 'testing.MailTest.sendSMTP';

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 10 Syntaks CREATE FUNCTION CREATE FUNCTION function-name ( [ FunctionParameter [, FunctionParameter] ] * ) RETURNS DataType [ FunctionElement ] * FunctionParameter : [ parameter-Name ] DataType FunctionElement : { | LANGUAGE { JAVA } | EXTERNAL NAME string | PARAMETER STYLE JAVA | { NO SQL | CONTAINS SQL | READS SQL DATA } | { RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT } } fullstendig navn på Java-metoden dersom ingenting oppgis, gjelder READS SQL DATA obliga- torisk dersom ingenting oppgis, gjelder CALLED ON NULL INPUT funksjonen må selv teste på input-verdier som er null

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 11 Funksjonseksempler CREATE FUNCTION TO_DEGREES(RADIANS DOUBLE) RETURNS DOUBLE PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'java.lang.Math.toDegrees' ; CREATE FUNCTION GETSYSTEMPROPERTY(NAME VARCHAR(128)) RETURNS VARCHAR(128) LANGUAGE JAVA EXTERNAL NAME 'java.lang.System.getProperty' PARAMETER STYLE JAVA NO SQL;

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 12 Litt mer syntaks Å kalle en prosedyre –CALL procedure-Name ( [ expression [, expression]* ] ) –Eksempel CALL hallo2(‘Ingrid’); Å kalle en funksjon –VALUES expression –Eksempel VALUES CURRENT_DATE; –Egendefinerte funksjoner kan også inngå i SELECT-setninger på samme måte som f.eks. AVG() og SUM() Å slette prosedyrer og funksjoner –DROP PROCEDURE procedure-name –DROP FUNCTION function-name

Før vi går videre med tjenerprogrammeringen, må vi repetere litt fra i vår – behov for unntakshåndtering i JDBC-programmering Forelesning 11, side 13

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 11, side 14

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 15 Databaseprogrammering hos tjeneren Ikke-nøstet forbindelse: –Prosedyren/funksjonen setter opp sin egen databaseforbindelse Nøstet forbindelse: –Behandler kun nøstet forbindelse idag –Også denne bør ”lukkes” for å rydde opp i buffere, etc. –Den bruker samme forbindelse som den kallende prosessen –Ofte naturlig (og nødvendig) å bruke samme transaksjonsrom som der prosedyren/funksjonen kalles fra –Connection forbindelse = DriverManager.getConnection("jdbc:default:connection:"); –Commit og rollback normalt ikke tillatt –autocommit er satt til false –Kan ikke endre data i tabellen som foreldresetningen bruker select..., funksjon() from tabell; her kan ikke funksjon() endre tabell. –Kan ikke slette tabellen som foreldresetningen bruker Vis Opprydder.java Vis eksempelFagStudent.sql Vis KarakterSnitt.java Lag og kjør funksjon Vis og kjør TestJava.java Se eksempelsamlingen.

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 16 Eksempler på triggere ansatt_s stilling lonnskode ekstern_s rolle student_s studiekull opptaksaar person_s pers_id {PK} etternavn fornavn tlf Trigger som skal forhindre at ansatt også er registrert som student og/eller ekstern. Gjennomgå og kjør person_s.sql PersonKontroll.java. Se eksempelsamlingen.

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 17 Triggere En databasetrigger er en prosedyre som knyttes direkte til en tabell i databasen Triggeren aktiviseres ved INSERT, UPDATE eller DELETE Triggertyper –BEFORE setning – kun én gang, før setningen utføres –BEFORE rad – før hver rad som settes inn, endres eller slettes –AFTER rad – etter hver rad som settes inn, endres eller slettes –AFTER setning – kun én gang, etter at setningen er utført Kan i koden referere til feltene som påvirkes – både de nye og de gamle For insert-setninger inneholder old-raden NULL-verdier For delete-setninger inneholder new-raden NULL-verdier

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 18 Syntaks CREATE TRIGGER CREATE TRIGGER TriggerName { AFTER | NO CASCADE BEFORE } { INSERT | DELETE | UPDATE [ OF column-Name [, column-Name]* ] } ON table-Name [ ReferencingClause ] [ FOR EACH { ROW | STATEMENT } ] [ MODE DB2SQL ] Triggered-SQL-statement ReferencingClause REFERENCING { { OLD | NEW } [ AS ] correlation-Name [ { OLD | NEW } [ AS ] correlation-Name ] | { OLD_TABLE | NEW_TABLE } [ AS ] Identifier [ { OLD_TABLE | NEW_TABLE } [AS] Identifier ] } mapper til et ResultSet med en rad (kan bare brukes av triggere knyttet til rader) mapper til et ResultSet med relevant størrelse (kan bare brukes av triggere knyttet til setninger) “transition variables” “transition tables”

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 19 Triggere, eksempler CREATE TRIGGER t1 NO CASCADE BEFORE UPDATE ON x FOR EACH ROW MODE DB2SQL values app.notify ('Jerry', 'Table x is about to be updated'); CREATE TRIGGER FLIGHTSDELETE AFTER DELETE ON FLIGHTS REFERENCING OLD_TABLE AS DELETEDFLIGHTS FOR EACH STATEMENT DELETE FROM FLIGHTAVAILABILITY WHERE FLIGHT_ID IN (SELECT FLIGHT_ID FROM DELETEDFLIGHTS); CREATE TRIGGER FLIGHTSDELETE3 AFTER DELETE ON FLIGHTS REFERENCING OLD AS OLD FOR EACH ROW DELETE FROM FLIGHTAVAILABILITY WHERE FLIGHT_ID = OLD.FLIGHT_ID;

Datamodellering og databaser Else Lervik, oktober 2012 Forelesning 11, side 20 Ut- og inn/ut-parametre i prosedyrer Lagrede prosedyrer (og funksjoner) kan ha tre typer parametre –inn-parametre – kjent fra Java –ut-parametre – ukjent i Java –inn/ut-parametre – ukjent i Java De to siste typene er en følge av at vi ikke programmerer objektorientert. I oo-programmer holder objektet dataene, i et ikke-oo- miljø må vi sende dem ut og inn til prosedyrene. Bruker Java-tabeller med lengde 1 for å få til ut- og inn/ut-parametre JDBC-interface CallableStatement –brukes til å kalle lagrede prosedyrer –inn-argumenter gis verdi via set-metoder arvet fra PreparedStatement –ut-argumenter må registreres med datatype før kallet –verdiene til ut-argumentene hentes ut via egne get-metoder Vis og kjør ParameterTester.java.