Bruke SQL fra Java. Med JDBC (Java Database Connec/vity)

Like dokumenter
JDBC. Java Data Base Connec.vity

Bruke SQL fra Python. Med Psycopg2

Hva er Derby og Java DB? Denne forelesningen. Java Database Connectivity (JDBC) Hva er Derby og Java DB?

JDBC. Java DataBase Connectivity SQL i Java Læreboken: 8.5, s Forelesning i TDT4145, 9. mars 2004 Av Gisle Grimen

Java Database Connectivity (JDBC) Norvald H. Ryeng

Tilkobling og Triggere

Sikkerhet og tilgangskontroll i RDBMS-er

ORDBMS og OODBMS i praksis

Oppgave 1 (Opprett en database og en tabell)

Videregående programmering 6

INF1300 Det meste av resten av

Indre select-setninger Nestede select-setninger

INF1300 Introduksjon til databaser

INF1300 Det meste av resten av SQL. Utleggsark v. 2.0

Unit Relational Algebra 1 1. Relational Algebra 1. Unit 3.3

INF1300 Introduksjon til databaser

Prosedyrer. Lars Vidar Magnusson. October 26, Lars Vidar Magnusson () Forelesning i DAS October 26, / 19

Repetisjon: Normalformer og SQL

Å programmere databasetjeneren JavaDB. Programkoden ligger i databasen

SQL: Datatyper m.m. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Datatyper m.m. V18 1 / 12

Metaspråket for å beskrive grammatikk

SQL: Systemaspekter. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Systemaspekter V18 1 / 21

2: Hvilke verdier forekommer i attributtet filmtype i relasjonen filmitem? Lag en oversikt over filmtypene og hvor mange filmer innen hver type.

Eksamen i Internetteknologi Fagkode: ITE1526

UNIVERSITETET I OSLO

Databases 1. Extended Relational Algebra

SQL 3: Opprette tabeller, datainnsetting og utsnitt

SQL Structured Query Language. Repetisjon av select spørringer Nestede select spørringer Mengdeoperasjoner Views Flere operatorer

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ragnar Normann 1

Relasjoner terminologi

Databaser kort intro. Tom Heine Nätt

1. SQL datadefinisjon og manipulering

UNIVERSITETET SQL. Structured Query Language (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

UNIVERSITETET I OSLO SQL. Structured Query Language. (forts.) Institutt for Informatikk. INF Ellen Munthe-Kaas 1

10. ASP og SQL Innledning Recordset-objektet. Innhold. Referanse til læreboka Kapittel Se detaljer nedenfor.

Relasjoner terminologi. Kopi av lysark fra forelesningen 13. oktober. Legges ut inntil notatet som samler alt om SQL kommer...

Database security. Kapittel 14 Building Secure Software. Inf329, Høst 2005 Isabel Maldonado

IN2090 Databaser og datamodellering. 08 Typer og skranker

XML enabled database. support for XML in Microsoft SQL Server 2000 & Martin Malý

IN2090 Databaser og datamodellering. 08 Typer og skranker

Databasers typesystem. IN2090 Databaser og datamodellering. 08 Typer og skranker. SQL-standarden vs. RDBMSer. Hvilke datatyper har vi

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

SQL, del 1 - select. Hva er SQL?

SQL Structured Query Language

Datamodellering og databaser SQL, del 2

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Datamodellering og databaser SQL, del 2

SQL-omgivelser. SQL-omgivelse

Utvikling fra kjernen og ut

Feilmelding Årsak Løsning

EXAM TTM4128 SERVICE AND RESOURCE MANAGEMENT EKSAM I TTM4128 TJENESTE- OG RESSURSADMINISTRASJON

1. Innføring i bruk av MySQL Query Browser

Integritetsregler i SQL

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Datamodellering og databaser SQL, del 2

IN2090 Introduksjon til databaser

Ekstramateriale: Eksempel på PostgreSQL 8.4 og SQL:1999 (ikke pensum 2012)

Agenda. Data og grenser Kontekster XSS XSS og kompliserende kontekster Injection attacks Beskyttelse OWASP

Applikasjonsutvikling med databaser

SQL, del 1 - select. Hva er SQL?

Løsningsforslag Eksamen V08. Oppgave 1. Oppgave 1.1. Oppgave 1.2. Oppgave 1.3. Se i boka/forelesningsnotatene:-) Se i boka/forelesningsnotatene:-)

TMA4329 Intro til vitensk. beregn. V2017

Integritetsregler i SQL

EKSAMEN I FAG TDT MMI Lørdag 11. august 2012 Tid: kl

Integritetsregler i SQL. Primærnøkler

Relasjoner terminologi

Øvingsforelesning 5 Python (TDT4110)

EKSAMEN. TILLATTE HJELPEMIDLER: Alle trykte og skrevne. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

Dette er vår første obligatoriske oppgave i kurset Moderne Databaseteknologi.

Transaksjoner og flerbrukerproblematikk. Transaksjoner

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

Løsningsforslag Test 2

Løsningsforslag til eksamen i INF1000 våren 2006

Alle attributter har NULL som mulig verdi. mulige verdier for integer: NULL, 0, 1, 2, 3...

Post-it spørsmål fra timen (Arv og subklasser)

Transaksjoner og flerbrukerproblematikk. Transaksjoner

LC238D Datamodellering og databaser SQL, del 1 - SELECT

Slope-Intercept Formula

EKSAMEN 6102 / 6102N DATABASER

MySQL-database, php. Innhold. 8 MySQL-database, php. 8.1 Databasen MySQL

Øvingsforelesning 5 Python (TDT4110)

HØGSKOLEN I SØR-TRØNDELAG

Eksamen i IBE102 Webutvikling Våren 2017.

SQL: Repe)sjon og eksempler Deniz Akkøk Mathias Stang

EKSAMEN I FAG TDT4180 MMI Mandag 18. mai 2009 Tid: kl

Oppgave: Finn navn og tittel på alle som har arbeidet på prosjektet «Vintersalg»

INF1300 Introduksjon til databaser

EKSAMEN DATABASER

Level Set methods. Sandra Allaart-Bruin. Level Set methods p.1/24

Dynamic Programming Longest Common Subsequence. Class 27

1. Introduksjon til Oracle Express Edition

IN2090 Databaser og datamodellering 07 Datamanipulering

HØGSKOLEN I SØR-TRØNDELAG

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

KROPPEN LEDER STRØM. Sett en finger på hvert av kontaktpunktene på modellen. Da får du et lydsignal.

TDT4117 Information Retrieval - Autumn 2014

IN2010: Algoritmer og Datastrukturer Series 2

Transkript:

Bruke SQL fra Java Med JDBC (Java Database Connec/vity) 0

1

1

1

2

Package java.sql 3

Package java.sql (SE 7) Array Blob CallableStatement Clob ConnecIon DatabaseMetaData Driver NClob ParameterMetaData PreparedStatement Ref ResultSet ResultSetMetaData RowId Savepoint SQLData SQLInput SQLOutput SQLXML Statement Struct Wrapper 4

Package java.sql Array Blob CallableStatement Clob ConnecIon DatabaseMetaData Driver NClob ParameterMetaData PreparedStatement Ref ResultSet ResultSetMetaData RowId Savepoint SQLData SQLInput SQLOutput SQLXML Statement Struct Wrapper 4

Package java.sql Array Blob CallableStatement Clob ConnecIon DatabaseMetaData Driver NClob ParameterMetaData PreparedStatement Ref ResultSet ResultSetMetaData RowId Savepoint SQLData SQLInput SQLOutput SQLXML Statement Struct Wrapper 4

ConnecIon 5

ConnecIon Statement 5

ConnecIon Statement ResultSet 5

Package java.sql 7 klasser i java.sql. Vi trenger én av dem: DriverManager The basic service for managing a set of JDBC drivers Her finner vi metoder som gir oss en forbindelse. De\e skjer med metoder som returnerer (en peker Il) et objekt av typen ConnecIon. 5

Håndtere forbindelser mellom Java og PostgreSQL I klassen DriverManager finner vi metoder som gir oss en forbindelse. De\e skjer med metoder som returnerer (en peker Il) et objekt av typen ConnecIon. staic ConnecIon getconnecion(string url, ProperIes info) 6

Håndtere forbindelser mellom Java og PostgreSQL I klassen DriverManager finner vi metoder som gir oss en forbindelse. De\e skjer med metoder som returnerer (en peker Il) et objekt av typen ConnecIon. staic ConnecIon getconnecion(string url, ProperIes info) DriverManager.getConnecIon(url, p); 6

DriverManager.getConnecIon(url, p); 6

DriverManager.getConnecIon(url, p); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; 6

DriverManager.getConnecIon(url, p); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; Properties p = new Properties(); 6

DriverManager.getConnecIon(url, p); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; Properties p = new Properties(); p.setproperty("ssl", "true"); 6

DriverManager.getConnecIon(url, p); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; Properties p = new Properties(); p.setproperty("ssl", "true"); p.setproperty("sslfactory", "org.postgresql.ssl.nonvalidatingfactory"); 6

DriverManager.getConnecIon(url, p); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; Properties p = new Properties(); p.setproperty("ssl", "true"); p.setproperty("sslfactory", "org.postgresql.ssl.nonvalidatingfactory"); p.put("user", "michael"); 6

DriverManager.getConnecIon(url, p); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; Properties p = new Properties(); p.setproperty("ssl", "true"); p.setproperty("sslfactory", "org.postgresql.ssl.nonvalidatingfactory"); p.put("user", "michael"); p.put("password", passord); 6

DriverManager.getConnecIon(url, p); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; Properties p = new Properties(); p.setproperty("ssl", "true"); p.setproperty("sslfactory", "org.postgresql.ssl.nonvalidatingfactory"); p.put("user", "michael"); p.put("password", passord); ProperIes p String url 6 "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"

DriverManager.getConnecIon(url, p); Klassedatastruktur for klassen DriverManager staic ConnecIon getconnecion(string url, ProperIes info) ProperIes p String url 6 "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"

ConnecIon con = DriverManager.getConnecIon(url, p); Klassedatastruktur for klassen DriverManager staic ConnecIon getconnecion(string url, ProperIes info) ProperIes p String url 6 "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"

ConnecIon ConnecIon con = DriverManager.getConnecIon(url, p); ConnecIon con 6

ConnecIon con 6

ConnecIon con Sende SQL-setning Il DBMS 6

Kjøre SQL-kommandoer: Statement-klassen ConnecIon Statement createstatement() con 7

Kjøre SQL-kommandoer: Statement-klassen ConnecIon Statement createstatement() con /* Creates a Statement object for sending SQL statements to the database. */ 7

Kjøre SQL-kommandoer: Statement-klassen ConnecIon Statement createstatement() con /* Creates a Statement object for sending SQL statements to the database. */ Statement stm = con.createstatement(); 7

Kjøre SQL-kommandoer: Statement-klassen ConnecIon Statement createstatement() con /* Creates a Statement object for sending SQL statements to the database. */ Statement stm = con.createstatement(); Statement stm 7

Kjøre SQL-kommandoer: Statement-objektet Statement stm 8

Kjøre SQL-kommandoer: Statement-objektet Statement stm 8

Kjøre SQL-kommandoer: Statement-objektet ResultSet executequery(string sql) Statement stm Executes the given SQL statement, which returns a single ResultSet object. 8

Statement ConnecIon ResultSet 8

Ujøre spørringer: Statement-objektet ResultSet executequery(string sql) Statement stm String spørring = " select F.filmid as fid, F.Itle as I\el, F.prodyear as paar from film F natural join Filmcountry C where C.country='Norway " ; 8

Ujøre spørringer: Statement-objektet ResultSet executequery(string sql) Statement stm String spørring = " select F.filmid as fid, F.Itle as I\el, F.prodyear as paar from film F natural join Filmcountry C where C.country='Norway " ; String spørring = "select F.filmid as fid, " +" F.title as tittel, " +" F.prodyear as paar " +"from film F natural join Filmcountry C " +"where C.country='Norway' " ; 8

Ujøre spørringer: Statement-objektet ResultSet executequery(string sql) Statement stm String spørring = "select F.filmid as fid, " +" F.title as tittel, " +" F.prodyear as paar " +"from film F natural join Filmcountry C " +"where C.country='Norway' " ; 8

Ujøre spørringer: Statement-objektet ResultSet executequery(string sql) Statement stm String spørring = "select F.filmid as fid, " +" F.title as tittel, " +" F.prodyear as paar " +"from film F natural join Filmcountry C " +"where C.country='Norway' " ; ResultSet norskefilmer = stm.executequery (spørring); 8

ConnecIon Statement ResultSet 8

Hente resultatene: ResultSet-objektet fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... ResultSet norskefilmer ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... ResultSet norskefilmer A table of data represen/ng a database result set, which is usually generated by execu/ng a statement that queries the database. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... ResultSet norskefilmer A ResultSet object maintains a cursor poin/ng to its current row of data. Ini/ally the cursor is posi/oned before the first row. The next method moves the cursor to the next row, and because it returns false when there are no more rows in the ResultSet object, it can be used in a while loop to iterate through the result set.. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... ResultSet norskefilmer A ResultSet object maintains a cursor poin/ng to its current row of data. Ini/ally the cursor is posi/oned before the first row. The next method moves the cursor to the next row, and because it returns false when there are no more rows in the ResultSet object, it can be used in a while loop to iterate through the result set.. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() ResultSet norskefilmer Moves the cursor forward one row from its current posi/on. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() the current row ResultSet norskefilmer Moves the cursor forward one row from its current posi/on. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() the current row ResultSet norskefilmer Moves the cursor forward one row from its current posi/on. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() the current row ResultSet norskefilmer Moves the cursor forward one row from its current posi/on. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() the current row ResultSet norskefilmer Moves the cursor forward one row from its current posi/on. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() the current row ResultSet norskefilmer Moves the cursor forward one row from its current posi/on. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() ResultSet norskefilmer Moves the cursor forward one row from its current posi/on. ResultSet norskefilmer = stm.executequery (spørring); 9

Hente resultatene: ResultSet-objektet cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() String getstring(string columnlabel) int getint(int columnindex) the current row ResultSet norskefilmer Moves the cursor forward one row from its current posi/on. Retrieves the value of the designated column in the current row of this ResultSet object as a String. Retrieves the value of the designated column in the current row of this ResultSet object as an int. 9

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... the current row ResultSet norskefilmer boolean next() String getstring(string columnlabel) int getint(int columnindex) Moves the cursor forward one row from its current posi/on. Retrieves the value of the designated column in the current row of this ResultSet object as a String. Et ResultSet-objekt Retrieves the value of the designated column in the current row of this ResultSet object as an int. 9

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... the current row ResultSet norskefilmer boolean next() String getstring(string columnlabel) int getint(int columnindex) Et ResultSet-objekt String title = norskefilmer.getstring(2); 10

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() the current row String Itle ResultSet norskefilmer Varis String getstring(string columnlabel) int getint(int columnindex) Et ResultSet-objekt String title = norskefilmer.getstring(2); 10

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() the current row String Itle ResultSet norskefilmer Varis String getstring(string columnlabel) int getint(int columnindex) Et ResultSet-objekt String title = norskefilmer.getstring(2); int filmid = norskefilmer.getint( fid ); 10

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... boolean next() the current row String Itle ResultSet norskefilmer Varis String getstring(string columnlabel) int getint(int columnindex) int 230 filmid Et ResultSet-objekt String title = norskefilmer.getstring(2); int filmid = norskefilmer.getint( fid ); 10

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... the current row ResultSet norskefilmer boolean next() String getstring(string columnlabel) int getint(int columnindex) while ( norskefilmer.next() ) { fm = new Film(norskeFilmer.getInt("fid")); fm.tittel = norskefilmer.getstring("tittel"); fm.produksjonsår = norskefilmer.getint("paar"); filmer.add(fm); } 10

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... the current row ResultSet norskefilmer boolean next() String getstring(string columnlabel) int getint(int columnindex) while ( norskefilmer.next() ) { fm = new Film(norskeFilmer.getInt("fid")); fm.tittel = norskefilmer.getstring("tittel"); fm.produksjonsår = norskefilmer.getint("paar"); filmer.add(fm); } 10

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... the current row ResultSet norskefilmer boolean next() String getstring(string columnlabel) int getint(int columnindex) while ( norskefilmer.next() ) { fm = new Film(norskeFilmer.getInt("fid")); fm.tittel = norskefilmer.getstring("tittel"); fm.produksjonsår = norskefilmer.getint("paar"); filmer.add(fm); } 10

cursor fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... the current row ResultSet norskefilmer boolean next() String getstring(string columnlabel) int getint(int columnindex) while ( norskefilmer.next() ) { fm = new Film(norskeFilmer.getInt(1)); fm.tittel = norskefilmer.getstring("tittel"); fm.produksjonsår = norskefilmer.getint(3); filmer.add(fm); } 10

Properties p = new Properties(); p.setproperty("ssl", "true"); p.setproperty("sslfactory", "org.postgresql.ssl.nonvalidatingfactory"); p.put("user", "michael"); p.put("password", passord); // "ifikurs_ro"); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; Connection con = DriverManager.getConnection(url, p); } Statement stm = con.createstatement(); String spørring = "select F.filmid as fid, " +" F.title as tittel, " +" F.prodyear as paar " +"from film F natural join Filmcountry C " +"where C.country='Norway'" ; ResultSet norskefilmer = stm.executequery (spørring); while (norskefilmer.next() ) { fm = new Film(norskeFilmer.getInt("fid")); fm.tittel = norskefilmer.getstring("tittel"); fm.produksjonsår = norskefilmer.getint("paar"); filmer.add(fm); } 11

Properties p = new Properties(); p.setproperty("ssl", "true"); p.setproperty("sslfactory", "org.postgresql.ssl.nonvalidatingfactory"); p.put("user", "michael"); p.put("password", passord); // "ifikurs_ro"); String url = "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb"; String spørring = "select F.filmid as fid, " +" F.title as tittel, " +" F.prodyear as paar " +"from film F natural join Filmcountry C " +"where C.country='Norway'" ; DriverManager.getConnection (url,p).createstatement( ).executequery(spørring); while (norskefilmer.next() ) { fm = new Film(norskeFilmer.getInt("fid")); fm.tittel = norskefilmer.getstring("tittel"); fm.produksjonsår = norskefilmer.getint("paar"); filmer.add(fm); } 11

ProperIes p String url "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb" 11

ProperIes p String url "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb" staic ConnecIon getconnecion(string url, ProperIes info) Klassedatastruktur for klassen DriverManager 11

ProperIes p String url "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb" staic ConnecIon getconnecion(string url, ProperIes info) Statement createstatement() ConnecIon con 11

ProperIes p String url "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb" staic ConnecIon getconnecion(string url, ProperIes info) Statement createstatement() ConnecIon con ResultSet executequery(string sql) Statement stm 11

ProperIes p String url "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb" staic ConnecIon getconnecion(string url, ProperIes info) Statement createstatement() ConnecIon con ResultSet executequery(string sql) Statement stm String spørring " select F.filmid as fid, F.Itle as I\el, F.prodyear as paar from film F natural join Filmcountry C where C.country='Norway " 11

ProperIes p String url "jdbc:postgresql://dbpg-ifi-kurs.uio.no/fdb" staic ConnecIon getconnecion(string url, ProperIes info) Statement createstatement() ConnecIon con ResultSet executequery(string sql) Statement stm String spørring " select F.filmid as fid, F.Itle as I\el, F.prodyear as paar from film F natural join Filmcountry C where C.country='Norway " fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... ResultSet norskefilmer 11

Statement createstatement() ConnecIon con ResultSet executequery(string sql) Statement stm String spørring " select F.filmid as fid, F.Itle as I\el, F.prodyear as paar from film F natural join Filmcountry C where C.country='Norway " fid tittel paar ---------+-------------------------------+------ 230 Varis 2004 340 Anolit 2002 356 Kvinnen i mitt liv 2003 632 Syx 1988 664 Portrettet 1954 774 22 2000 792 Andre omgang 2007 998 Digre daier 1997 1014 Stopp 2001 1030 Tid for frokost 2004... ResultSet norskefilmer 11

ConnecIon Statement ResultSet 11

Parametriserte spørringer Hva om vi ønsker å bruke strings eller annen brukerinput? Det er ikke lurt å konkatenere disse på «vanlig» måte! Om vi f.eks. har en string som inneholder følgende: String input = "O'boy" Ser vi kanskje at de\e kan føre Il problemer i denne spørringen: String query = "SELECT * FROM tabell WHERE name = '"+input+"' " System.out.println(query) Skriv ut følgende: SELECT * FROM tabell WHERE name = 'O'boy' 12

Parametriserte spørringer Hva om vi ønsker å bruke strings eller annen brukerinput? Det er ikke lurt å konkatenere disse på «vanlig» måte! Løsning: Vi bruker PreparedStatement i stedet for Statement slik: int aar = 2002; String tittel = "Rachida"; String s = "SELECT filmid FROM film WHERE title =? AND prodyear =?"; try { PreparedStatement stm = connection.preparestatement(s); stm.setstring(1, tittel); stm.setint(2, aar); ResultSet res = stm.executequery();... } catch(sqlexception e) { // Noe gikk galt! e.printstacktrace(); } 13

Nyvg SQL Il oblig 6 For datalagring snakker vi gjerne om CRUD Create, Read, Update, Delete Create Ilsvarer «INSERT INTO», Read Ilsvarer «SELECT» I Illegg kan det være nyvg å vite om hvordan vi oppdaterer og sle\er data i SQL: UPDATE oppdaterer rader som IlfredssIller en beingelse UPDATE tabellnavn SET kolonne1 = verdi1, kolonne2 = verdi2,... WHERE betingelse; f.eks.: UPDATE timeliste SET beskrivelse = 'Ny beskrivelse' WHERE timelistenr = 3; DELETE sle\er rader som IlfredssIller en beingelse DELETE FROM tabellnavn where betingelse f.eks.: DELETE FROM timeliste WHERE timelistenr = 8; 14

Oppgave Foreslå spørringer som det er vanskelig å gjøre med select-setningen, hvor Java eller Python ville ha vært Il (stor) hjelp for å få rikig svar. Har du opplevd oppgaver som du skulle løse med SQL hvor du har savnet verktøy fra Python/Java eller andre programmeringsspråk? 15

create table Gruppelærer ( brnavn varchar(8), år int, vh varchar(4) ); 16

create table Gruppelærer ( brnavn varchar(8), år int, vh varchar(4) ); brnavn år vh ---------+------+----- mjstang 2018 vår mjstang 2017 høst Gruppelærer mjstang String int String 2018 brnavn år vh vår grlr 16

h\p://heim.ifi.uio.no/inf1300/oppgaver/idleksmoppg/2011-2.pdf create table Gruppelærer ( brnavn varchar(8), år int, vh varchar(4) ); For hver gruppelærer, finn det lengste antall semestere vedkommende har vært gruppelærer sammenhengende. F.eks. vil en som har vært gruppelærer våren 2008, våren 2009, høsten 2009, våren 2010, våren 2011 og høsten 2011 ha tre sammenhengende semestere på det meste (våren 2009, høsten 2009 og våren 2010) på grunn av brudd høsten 2008 og høsten 2010. 17

create view kodesem as ( select brnavn, år*2 as sk from Gruppelærer where vh = 'vår' ) union ( select brnavn, år*2 + 1 as sk from Gruppelærer where vh = 'høst' ) ; create table Gruppelærer ( brnavn varchar(8), år int, vh varchar(4) ); create view diffsem as select k2.brnavn, k2.sk, (k2.sk - k1.sk) as diff from kodesem k1, kodesem k2 where k1.brnavn = k2.brnavn and k2.sk >= k1.sk ; create view diffhull as select d1.brnavn, d1.sk, d1.diff from diffsem d1 where d1.diff+1 not in ( select d2.diff from diffsem d2 where d2.brnavn = d1.brnavn and d2.sk = d1.sk and d2.diff > d1.diff ) ; select R.brnavn, max(antsmh) as makssammenhengende from ( select brnavn, sk, ( min(diff) + 1 ) as antsmh from diffhull group by brnavn, sk ) as R group by R.brnavn ; 18