Eksempel på en database: studenter, kurser, eksamener

Relaterede dokumenter
Databaseadgang fra Java

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

MySQL i Java. Tutorial lavet af Jákup W. Hansen TSU semester 05.januar 2007

Bemærk! Et PHP script har kun brug for at forbinde én gang til databaseserveren. Det kan så sagtens udføre flere kommandoer vha. denne forbindelse.

Videregående programmering i Java

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft

Web- og serverprogrammering

De vigtigste SQL-sætninger. SQL kap Oprette database. DDL og DML

Rigtig SQL Programmering

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

En Kort Introduktion til Oracle

Introduktion til Oracle, Datalogi, RUC Af: Jens Lauterbach 2002

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

Introduktion til SQL queries

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

Views etc. Databaser

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

Indholdsfortegnelse Databaser og PHP... 3 Opgave... 4 Opgave... 5 Opgave... 6 Sidste opgave er en lille gæstebog... 7 Kilder og nyttige links:...

1. Basal select med (stjerne)

Begrænsninger i SQL. Databaser, efterår Troels Andreasen

SQL for MySQL-begyndere

DB undervisning 01-01

Database kursus Forår 2013

HTML, PHP, SQL, webserver, hvad er hvad??

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Opgave 1. Opret de 4 tabeller i FTSFrontend programmet. Indsæt mindst 3 forskellige tabelværdier i kunder, målerstatus, byer og regning..

Skriftlig eksamen i kurset. Informationssystemer

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Bilagsrapport til specialet Flash-light

Videregående programmering i Java

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Skriftlig eksamen i Databaser, Vinter 2001/2002. Pa opfordring har jeg udarbejdet mulige lsninger pa eksamensopgaverne, men

Vejledning i Opretning af formularer

Anne Randorff Højen

Database programmerings tips

Karens lille vejledning til Access

En opsamling af artefakter for Hotel Databasen som REST-service Bygger på Hotel opgaven i 8 trin

Dag 10 Flertrådet programmering

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

Databasesystemer fra forskellige synsvinkler

Eksamen, DSDS, efterår 2007

Bookie. IT-Universitetet i København. Grundlæggende Programmering. Eksamensprojekt. Forfattere: Sigrid Gyldenkærne Dalsgard Kasper Kronborg Isager

Databasesystemer. Databaser, efterår Troels Andreasen. Efterår 2002

Introduktion til programmering

Samspillet mellem databaser og kort styres af GeoCAD programmet GeoDB.

Skriftlig opgave. Designtanker i database-nære systemer

Dokumentering af umbraco artikeleksport:

Løsning af møntproblemet

Web Admin 5.5. Brugsvejledning for Domain admin. Copyright 2003 Gullestrup.net

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

Relationel Algebra og SQL

Skriftlig eksamen i Datalogi

Nintex Workflow UK/DK

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Anvendelse af metoder - Programmering

RefWorks en vejledning fra UCL Biblioteket. Indholdsfortegnelse

... øvelser. Fortæl mig, og jeg glemmer. Vis mig, og jeg husker. Involver mig, og jeg forstår. Konfutse

FC-intranet: FC-intranet er et fælles mail- og konferencesystem, hvor lærere og elever kan kommunikere.

Database optimering - Indeks

Data lagring. 2. iteration (implement backend)

Kursus navn: Indledende programmering Kursus nr

Tree klassen fra sidste forelæsning

SigmaT.

Opdatering af ISOWARE til version 6.1.0

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Transkript:

Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser fra Java programmer Tilgang til relationsdatabaser fra Java appletter Programmering 1999 KVL Side 20-1 Eksempel på en database: studenter, kurser, eksamener Et udsnit af relationen Student: efternavn fornavn studienummer Olesen Peter L2143 Hansen Erika Jø0007 Funder Ulrik Hg0014 Et udsnit af relationen Kursus: kursusnummer kursusnavn 10181 Databehandling 45621 Landbrugszoologi 15351 Miljømodeller 15311 Matematisk Grundkursus Et udsnit af relationen Eksamen: studienummer kursusnummer karakter L2143 010181 8 L2143 045621 9 Jø0007 010181 11 Jø0007 015311 8 L2143 015311 10 Hg0014 015311 7 Programmering 1999 KVL Side 20-2 Databasebegreber En relationsdatabase består af en samling navngivne relationer (= tabeller). En relation (= tabel) består af to ting: Et skema (= tabeloverskrift): Skemaet er relationens form; det er uforanderligt. Skemaet angiver navn og type på relationens attributter (felter). En samling tupler (= tabellinier): Samlingen af tupler er relationens indhold; den kan variere over tid. Hvert tupel indeholder et sæt værdier for relationens attributter (felter). Rækkefølgen af tuplerne i en relation er ligegyldig. Programmering 1999 KVL Side 20-3 Relationer og skemaer i eksemplet Relationer: Student, Kursus, Eksamen Relationernes skemaer: Student: (efternavn TEXT, fornavn TEXT, studienummer TEXT) Kursus: (kursusnavn TEXT, kursusnummer INT) Eksamen: (studienummer TEXT, kursusnummer INT, karakter INT) Programmering 1999 KVL Side 20-4

Operationer på relationsdatabaser Når man arbejder med relationsdatabaser bruger man sproget SQL SQL er opfundet af IBM ca. 1970. I SQL skelner man ikke mellem store og små bogstaver (i modsætning til Java). Her skriver vi SQL-ordrerne med stort og relations- og feltnavne med småt. Programmering 1999 KVL Side 20-5 Oprettelse af relationer (SQL CREATE) CREATE TABLE student (efternavn TEXT, fornavn TEXT, studienummer TEXT); CREATE TABLE kursus (kursusnummer INT, kursusnavn TEXT); CREATE TABLE eksamen (studienummer TEXT, kursusnummer INT, karakter INT); Man kan kigge på databasens relationer, og relationernes skemaer: \dt \d eksamen \d kursus Programmering 1999 KVL Side 20-6 Indsættelse af værdier i relationerne (SQL INSERT) INSERT INTO student VALUES ( Olesen, Peter, L2143 ); INSERT INTO student VALUES ( Hansen, Erika, Jø0007 ); INSERT INTO student VALUES ( Funder, Ulrik, Hg0014 ); INSERT INTO kursus VALUES (10181, Databehandling ); INSERT INTO kursus VALUES (45621, Landbrugszoologi ); INSERT INTO kursus VALUES (15351, Miljømodeller ); INSERT INTO kursus VALUES (15311, Matematisk Grundkursus ); INSERT INTO eksamen VALUES ( L2143, 010181, 8); INSERT INTO eksamen VALUES ( L2143, 045621, 9); INSERT INTO eksamen VALUES ( Jø0007, 010181, 11); INSERT INTO eksamen VALUES ( Jø0007, 015311, 8); INSERT INTO eksamen VALUES ( L2143, 015311, 10); INSERT INTO eksamen VALUES ( Hg0014, 015311, 7); Programmering 1999 KVL Side 20-7 Forespørgsler på databasen (SQL SELECT) Vis alle kurser: SELECT * FROM kursus; Vis alle kurser sorteret efter kursusnavn: SELECT * FROM kursus ORDER BY kursusnavn; Vis alle kurser med kursusnummer 010181: SELECT * FROM kursus WHERE kursusnummer = 010181; Vis kursusnumre på alle kurser der har været holdt eksamen i: SELECT kursusnummer FROM eksamen; Samme, uden dubletter: SELECT DISTINCT kursusnummer FROM eksamen; Programmering 1999 KVL Side 20-8

Forespør gsler der involverer flere relationer (samkøring; join) Vis kursusnavn på alle kurser der har været holdt eksamen i. Hvordan kursusnavnet står jo ikke i relationen Eksamen? Lav en samkøring (join) mellem relationerne Eksamen og Kursus: SELECT DISTINCT kursusnavn FROM kursus, eksamen WHERE kursus.kursusnummer = eksamen.kursusnummer; Vis alle studerende der har været til eksamen i kursus 10181: SELECT DISTINCT fornavn, efternavn FROM student, eksamen WHERE student.studienummer = eksamen.studienummer AND kursusnummer = 10181; Vis alle studerende der har været til eksamen i kurset Databehandling : SELECT DISTINCT fornavn, efternavn FROM student, eksamen, kursus WHERE student.studienummer = eksamen.studienummer AND kursus.kursusnummer = eksamen.kursusnummer AND kursus.kursusnavn = Databehandling ; Programmering 1999 KVL Side 20-9 Sletning (SQL DELETE) Fjern alle eksamener med karakterer under 9: DELETE FROM eksamen WHERE karakter < 9; Opgave: fjern alle studerende der har fået mindst 11 i en eksamen. Programmering 1999 KVL Side 20-10 Opdatering (SQL UPDATE) Nedsæt alle karakterer mellem 7 og 11 med 1: UPDATE eksamen SET karakter = karakter-1 WHERE 7 <= karakter AND karakter <= 11; Programmering 1999 KVL Side 20-11 Aggregerede udtræk: COUNT, SUM, AVG, MIN, MAX Vis antal eksamener hver studerende har gået til: SELECT studienummer, COUNT(karakter) FROM eksamen GROUP BY studienummer; Programmering 1999 KVL Side 20-12

Opret ny relation udfra forespørgsel (SQL SELECT INTO) Resultatet af en forespørgsel (SELECT) er en relation. Man kan direkte gemme resultatet i en ny relation, f.eks. Eksamensantal: SELECT studienummer, count(karakter) AS antal INTO eksamensantal FROM eksamen GROUP BY studienummer; Nye felter kan navngives med AS. Den nye relation kan bruges i nye forespørgsler: SELECT efternavn, fornavn, antal FROM student, eksamensantal WHERE student.studienummer = eksamensantal.studienummer; Opgave: hvordan finde de studerende der aldrig har fået 11 eller derover? Vink: Brug SELECT INTO, DELETE, og SELECT. Programmering 1999 KVL Side 20-13 Slet en hel relation (SQL DROP TABLE) Vi skal ikke bruge relationen Eksamensantal mere: DROP TABLE eksamensantal; Programmering 1999 KVL Side 20-14 JDBC: Brug af relationsdatabaser fra Java-programmer En relationsdatabaseserver er et program der passer en samling databaser. Databaseserveren er typisk forbundet til et netværk, f.eks. Internet. Der er mange forskellige databaseservere. Vi bruger PostgreSQL, en gratis tilgængelig server. Java kommunikerer med databaser via JDBC, Java Database Connectivity. Java-programmet starter med at oprette en forbindelse til databasen. Det sker ved hjælp af en URL (Uniform Resource Locator), som på WWW: jdbc:postgresql://ellemose.dina.kvl.dk/studier Kommunikationsprotokollen er jdbc Subprotokollen er postgresql Databaseserveren kører på maskinen ellemose.dina.kvl.dk Databasen hedder studier. Desuden skal man angive brugernavn og løsen (password) for ejeren af databasen. Programmering 1999 KVL Side 20-15 Et Java-program der læser fra databasen import java.io.*; import java.sql.*; public class StudierDB { public static void main(string[] args) throws SQLException { Connection db; // The connection to the database Statement st; // Our statement to run queries with String url = "jdbc:postgresql://ellemose.dina.kvl.dk/studier"; String usr = "sestoft"; String pwd = ""; Class.forName("postgresql.Driver"); catch (ClassNotFoundException e) { System.out.println("Cannot find the Postgresql driver"); db = DriverManager.getConnection(url, usr, pwd); st = db.createstatement();... spørg databasen...... læs fra resultatet fra databasen og udskriv på skærmen... st.close(); db.close(); Programmering 1999 KVL Side 20-16

Spørg database og læs resultatet fra databasen String query = "SELECT * FROM student ORDER BY fornavn"; boolean resultset = st.execute(query); if (resultset) // Results were produced by a SELECT statement { ResultSet rs = st.getresultset(); while (rs.next()) { String enavn = rs.getstring("efternavn"); String fnavn = rs.getstring("fornavn"); String stdnr = rs.getstring("studienummer"); System.out.println(fnavn + " " + enavn + " (" + stdnr + ")"); Programmering 1999 KVL Side 20-17 Nogle praktiske forhold Klientmaskinen er den maskine på hvilken Java-programmet kører. På klientmaskinen skal man installere Java-arkivet postgresql.jar. Man kan f.eks. kopiere arkivet til C:\java\lib på sin maskine. Java-arkivet postgresql.jar kan f.eks. fås fra U-drevet: copy U:\dat\prog\jdkwin95\postgresql.jar C:\java\lib eller fra kursets hjemmeside (hold Skift nede og klik på henvisningen fra denne side): http://www.dina.kvl.dk/ sestoft/programmering/udleveret.html Man skal også fortælle java hvor den finder arkivet: set CLASSPATH=.;U:\java\lib\classes.zip;C:\java\lib\postgresql.jar Det indsættes f.eks. i klientmaskinens C:\autoexec.bat Programmering 1999 KVL Side 20-18 At forbinde Java-appletter med databasen Det fungerer på samme måde som ved Java-programmer. Arkivet postgresql.jar skal ligge udpakket på webserveren (ikke klientmaskinen). Det udpakkede postgresql-arkiv skal ligge i det katalog der indeholder applettens.class fil. Arkivet udpakkes på webserveren med ordren jar xf postgresql.jar Databaseserveren skal køre på samme maskine som webserveren. En applet må nemlig kun kommunikere med den maskine som appletten kommer fra (af sikkerhedshensyn). Programmering 1999 KVL Side 20-19 Eksempel på applet med databaseadgang import java.sql.*; import java.awt.*; import java.awt.event.*; import java.applet.applet; public class StudieApplet extends Applet { private TextField stdnrind = new TextField(15); private TextField kurnrind = new TextField(10); private TextField karind = new TextField(10); private TextArea ud = new TextArea(4, 40); private Button tilføj = new Button("Tilføj"); private Button søg = new Button("Søg"); Connection db; // Forbindelsen til databasen Statement st; // En SQL-ordre public void init() {... // Kaldes når appletten læses ind public void destroy() {... // Kaldes når appletten bliver smidt ud class TilføjLytter implements ActionListener {... class SøgLytter implements ActionListener {... private void addtodatabase(string stdnr, int kurnr, int kar) {... private void searchdatabase(int kurnr) {... Programmering 1999 KVL Side 20-20

Init- og destroy-metoderne public void init() { add(new Label("Studienummer")); add(stdnrind); add(new Label("Kursusnummer")); add(kurnrind); add(new Label("Karakter")); add(karind); add(tilføj); tilføj.addactionlistener(new TilføjLytter()); add(søg); søg.addactionlistener(new SøgLytter()); add(ud); String url = "jdbc:postgresql://ellemose.dina.kvl.dk/studier"; String usr = "sestoft"; String pwd = ""; Class.forName("postgresql.Driver"); db = DriverManager.getConnection(url, usr, pwd); st = db.createstatement(); catch (Exception e) { ud.append("kan ikke åbne databasen: "+ e.getmessage()); // Denne metode kaldes når appletten ikke bliver brugt mere. public void destroy() { st.close(); db.close(); catch (SQLException e) { ud.settext("kan ikke lukke databasen: " + e.getmessage()); Programmering 1999 KVL Side 20-21 Indsættelse: lytterklasse og metode class TilføjLytter implements ActionListener { public void actionperformed(actionevent e) { addtodatabase(stdnrind.gettext(), Integer.parseInt(kurnrInd.getText()), Integer.parseInt(karInd.getText())); private void addtodatabase(string stdnr, int kurnr, int kar) { String query = "INSERT INTO eksamen VALUES ( "; query += " " + stdnr + " "; query += ", " + kurnr; query += ", " + kar; query += ")"; ud.append(query + "\n"); boolean resultset = st.execute(query); catch (SQLException e) { ud.append("databaseopdatering gik galt: " + e.getmessage()); Programmering 1999 KVL Side 20-22 Søgning: lytter og søgemetode class SøgLytter implements ActionListener { public void actionperformed(actionevent e) { searchdatabase(integer.parseint(kurnrind.gettext())); private void searchdatabase(int kurnr) { String query = "select fornavn, efternavn, karakter" + " from eksamen, student" + " where eksamen.studienummer = student.studienummer" + " and eksamen.kursusnummer = " + kurnr + " order by fornavn, efternavn"; boolean resultset = st.execute(query); if (resultset) { ResultSet rs = st.getresultset(); ud.settext(""); while (rs.next()) { String enavn = rs.getstring("efternavn"); String fnavn = rs.getstring("fornavn"); int kar = rs.getint("karakter"); ud.append(fnavn + " " + enavn + " fik " + kar + "\n"); catch (SQLException e) { ud.append("databasesøgning gik galt: "+ e.getmessage()); Programmering 1999 KVL Side 20-23 Husk: En relationsdatabase består af en samling relationer En relation (tabel) består af et skema (tabeloverskrift) og en samling tupler (linier) Forespørgselssproget SQL bruges til at arbejde med relationsdatabaser Java-programmer og appletter kan kommunikere med databaser over netværket ved hjælp af JDBC Programmering 1999 KVL Side 20-24