Eksempel på en database: studenter, kurser, eksamener

Relaterede dokumenter
Databaseadgang fra Java

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

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

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

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label

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

En Kort Introduktion til Oracle

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

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

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

Introduktion til SQL queries

Geografisk lokalisering i JSP

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)

Import af rekursivt (parent-child) hierarki i Palo

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

SQL for MySQL-begyndere

Views. Et view er en relation defined ud fra gemte tabeller ( base tables ) og andre views To typer:

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..

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Opgave 1 Basal select med (stjerne)

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

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

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

Sidste forelæsning. Jacob Aae Mikkelsen. 28. april 2013 IMADA. Jacob Aae Mikkelsen (IMADA) Sidste forelæsning 28.

Over Forelæsning omponenter ogrammering sigt 14, 1999 freda containere 15. oktober 1999 Eksempel: out GUI til beregning fakultet.

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

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

Kursusbeskrivelse. Forarbejde. Oprettelse af en Access-database

DML, Foresprgsler Relationel algebra + noget mere! af skemaer (overlap m. DDL)

Databasesystemer fra forskellige synsvinkler

Ratingsystem i PHP og MySQL

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

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

The Design Diaries PHP projekt

PROJEKT 3. The Design Diaries. LINK TIL BLOG: Af Mikkel Borg Svendsen & Sebastian Frank MUL B

En kort introduktion til JDBC

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Obligatorisk opgave 2. SQL, relationel algebra og relationel kalkyle

Introduktion til programmering

Databasesystemer. IT Universitetet i København 7. juni 2005

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.

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Relationel Algebra og SQL

Skriftlig eksamen i Datalogi

Nintex Workflow UK/DK

Databasesystemer. IT Universitetet i København 16. januar 2006

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

Afleveringsopgave. Efterår 2001

Anvendelse af metoder - Programmering

RefWorks en vejledning fra UCL Biblioteket. Indholdsfortegnelse

Efterår 2002 Note 10. Temaopgave

... ø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

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Objektorientering og databaser

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

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

Det sprogpædagogiske kørekort 2012/2013. Modul 2: Blog for begyndere

Hanne Niels Edith Harald Carsten Jørgen Henrik.

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