EXEC SQL BEGIN DECLARE SECTION



Samankaltaiset tiedostot
Helsingin yliopisto, TKTL Tietokantojen perusteet, k 2000 Tietokantaohjelmointi Harri Laine 1. SQL:n käyttö ohjelmissa

SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito. SQL - Tietokannan ylläpito

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

RDBMS - Yhteyskäytännöt

Java ja tietokannan käsittely (JDBC)

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

6 WWW-tietokantasovellukset Relaatiotietokannan suunnittelusta 134

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

käännös käännösvaiheessa tarkasettaan linkitys

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

Tietokannat II -kurssin harjoitustyö

Yhteenvetofunktiot Näkymät Tietokannan ylläpito Tietokantatapahtumat... 88

SELECT-lauseen perusmuoto

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

CSE-A1200 Tietokannat

Microsoft Visual Studio 2005

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

Sovellusarkkitehtuurit

CS-A1150 Tietokannat

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmoinnin perusteet Y Python

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

TIEDONHALLINTA - SYKSY Luento 8. Saapumisryhmä: Pasi Ranne /9/13 Helsinki Metropolia University of Applied Sciences

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

Makrojen mystinen maailma lyhyt oppimäärä

Tietokanta (database)

15. Ohjelmoinnin tekniikkaa 15.1

Java-kielen perusteet

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sovellusarkkitehtuurit

1. Omat operaatiot 1.1

Kielioppia: toisin kuin Javassa

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

Ohjelmoinnin jatkokurssi, kurssikoe

SQL - STRUCTURED QUERY LANGUAGE

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

Digitaalisen median tekniikat. JSP ja XML

Digitaalisen median tekniikat. JSP ja XML Harri Laine 1

TIETOKANTOJEN PERUSTEET MARKKU SUNI

Sovellusarkkitehtuurit

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

HELIA 1 (14) Outi Virkki Tiedonhallinta

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Kyselyn yleisrakenne:

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

7/20: Paketti kasassa ensimmäistä kertaa

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

Pedacode Pikaopas. Tietokantaa hyödyntävän sovelluksen luominen

4. Luokan testaus ja käyttö olion kautta 4.1

Harjoitustehtävä 1. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. Harjoitustehtävä 2. SQL kysely

Testaussuunnitelma NJC2. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietokantaohjelmoinnin tekniikkoja Java-kielellä

Ohjelmoinnin perusteet Y Python

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Harjoitus 5 (viikko 48)

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

16. Javan omat luokat 16.1

ITKP102 Ohjelmointi 1 (6 op)

Joko tunnet nämän Oracle10g SQL:n piirteet? Kari Aalto Saariston IT

Tietokantojen perusteet, syksy 1999 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Java-kielen perusteita

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Helsingin yliopisto, tktl DO Tietokantojen perusteet, kevät 2000 SQL- osa Harri Laine 1. SQL-yhteenvetofunktiot. SQL-yhteenvetofunktiot

Java-kielen perusteet

Hohde Consulting 2004

Ohjelmoinnin perusteet Y Python

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

TIEDONHALLINNAN PERUSTEET - SYKSY 2013

Ohjelmointiharjoituksia Arduino-ympäristössä

Tietokannat. CREATE TABLE table(col1,col2,... ); Luo uuden taulun. CREATE TABLE opiskelijat(opnumero,etunimi,sukunimi);

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

20. Javan omat luokat 20.1

Helsingin yliopisto/tktl Tietokantojen perusteet, s 2006 Tiedon mallinnus ja tietokannat. Harri Laine 1. Tietokanta.

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

5. HelloWorld-ohjelma 5.1

Transkriptio:

Tietokantaohjelmointi Tietokantaa käytetään harvoin suoraan kyselyliittymän kautta Tyypillisesti käyttö tapahtuu sovellusohjelman kautta Sovellusohjelmaa laadittaessa vaihtoehtoja tietokantakäsitettelyn toteutukseen ovat: Sulautettu SQL (embedded SQL) Ohjelmointirajapinnan (API) kautta tapahtuva käyttö Tietokannan piilottavat välikerrosohjelmistot Erityinen tietokantaohjelmointikieli 1 Sulautettu SQL SQL-lauseet kirjoitetaan ohjelmointikielen lauseiden joukkoon erityisesti merkittyinä siten, että esikääntäjä ( SQL pre-compiler) osaa tunnistaa ne ja muuntaa ne kirjastooperaatioiden kutsuiksi Esikääntäjän tuottama tulostiedosto käännetään normaalikääntäjällä 2-vaiheinen käännös Esikääntäjiä saatavissa muutamille kielille, tkhj:n toimittajalta (C, Cobol, Pascal,, Java) 2

Esikääntäjän käyttö sulautetussa SQL:ssä käännetty ohjelma normaali kääntäjä Eristetyt SQL- lauseet ohjelmointi- kielen lauseiden lomassa (esim C+SQL) esi- kääntäjä Aliohjelma- kirjasto Normaali ohjelmointikieli+ kirjastofunktioiden parametreiksi upotetut SQL-lauseet 3 Esimerkki sulautetusta SQL:stä - Pascal function keskipalkka(dept:integer):real; var n: integer; psumma: integer; #include SQLCA.INC EXEC SQL BEGIN DECLARE SECTION var palkka: integer; os: integer; EXEC SQL END DECLARE SECTION 4

Esimerkki sulautetusta SQL:stä - Pascal begin EXEC SQL DECLARE pal CURSOR FOR SELECT salary from employee where department= :os; n:=0; psumma:=0; os:= dept; EXEC SQL open pal; EXEC SQL fetch pal into :palkka; while sqlcode = 0 do begin psumma := psumma + palkka; n := n + 1; EXEC SQL fetch pal into :palkka; end; EXEC SQL close pal; if n > 0 then keskipalkka := psumma/n else keskipalkka := 0; end;. 5 Sulautetun SQL:n käsitteitä Kursori Kyselyn vastausrivijoukon läpikäyntiin käytettävä rakenne määritellään (declare) avataan (open) = kysely suoritetaan avaushetkellä voimassaolevilla muuttuja-arvoilla haetaan rivi (fetch) = edetään tulosrivijoukossa + siirretään vuoroon tulevan rivin data ohjelmamuuttujiin suljetaan (close) 6

Sulautetun SQL:n käsitteitä Tietokantaoperaatio voi epäonnistua. Jokaisen tietokantaoperaation jälkeen on tutkittava onnistuiko operaatio sqlstate ja vanhemman standardin mukaisesti sqlcode muuttujat palauttavat virhekoodin (sqlcode=0, jos kaikki OK, muut arvot erilaisia virhekoodeja - arvot järjestelmäkohtaisia) 7 Rajapintakirjaston kautta tapahtuva käyttö Ohjelmointirajapinnan (API) kautta tapahtuva käyttö perustuu rajapinnan toteuttavan kirjaston käyttöön Toimittajakohtaiset kirjastot Native API esim OracleCLI = Oracle Call Level Interface Toimittajariippumattomat kirjastot esim ODBC (Microsoft Open Database Connection), Java liittymäkirjasto Mahdollistavat tkhj:n vaihdon, ja useita tietokantoja samassa ohjelmassa 8

Rajapintakirjaston kautta tapahtuva käyttö Toimittajariippumaton kirjasto vaatii kuitenkin tkhjkohtaisen ajurin toimiakseen tietyn tkhj:n kanssa ODBC on yleisimmin käytetty liittymäkirjasto Kaikilla merkittävillä toimittajilla on tarjolla tkhj-kohtaiset ODBCajurit. C-kieli tyylinen parametrivälitys. Javan -rajapinnan perusideat samoja kuin ODBC:n Osa ODBC:n detaljeista piilotettu tietokannankäsittelyluokkien sisään, joten käyttö on hieman yksinkertaisempaa. 9 Java tietokantakytkentä () perustuu muutamaan keskeiseen luokkaan: DriverManager luokan palvelujen avulla otetaan käyttöön välttämätön tkhjkohtainen ajuri (erillinen toimittajalta saatava kirjasto) ja muodostetaan yhteys tietokantaan, Ajurit osaavat yleensä rekisteröidä itsensä, joten ajuriluokan lataus muistiin riittää Tässä kuitenkin rekisteröintikoodi, joka ottaa käyttöön Oracle thin-ajurin Oracle-kantaa varten DriverManager.registerdriver( new oracle.jdbc.driver.oracledriver()); 10

Connection tietokantayhteys - tietokantaistunto tiettyyn käyttäjätunnukseen perustuva yhteys ohjelman ja tietokannan välillä peruspalvelut tietokantatapahtumien käsittelyyn ja tietokantaoperaatioiden muodostukseen kaikki käsittely perustuu yhteyden olemassaoloon ja tapahtuu sen kautta yhteys tulisi lopettaa close operaatiolla, kun sitä ei enää tarvita - vapauttaa resursseja DriverManager tarjoaa palvelun yhteyden luontiin 11 Connection con = DriverManager.getConnection( jdbc:oracle:thin:@kontti.helsinki.fi:1521:ttst, info, expert ); Luo yhteyden oracle thin ajuria käyttäen portin 1521 kautta koneessa kontti.helsinki.fi olevaan ttstnimiseen tietokantaan käyttäen käyttäjätunnusta info ja salasanaa expert. 12

Statement Mekanismi operaatioiden välittämiseen tietokannanhallintajärjestelmälle ja vastausten palauttamiseen takaisin ohjelmalle palveluja mm. executequery - kyselyjen suoritukseen executeupdate - muihin operaatioihin Connection tarjoaa palvelun Statement olion luontiin 13 ResultSet Kyselyn vastaukset ja niiden käsittely Vastaa sulautetun SQL:n kursori käsitettä Statement.executeQuery luo ResultSet olion operaatiolle annetaan kysely merkkijonoparametrina Statement stmt= con.createstatement(); ResultSet rs= stmt.executequery( select nimi, osoite, palkka from henkilo ); 14

Vastauksen käsittely ResultSet:n metodeilla Totuusarvoinen funktio next() aktivoi vastauksen seuraavan rivin. Funktio saa arvokseen true, jos tällainen rivi on olemassa. Ensimmäisellä kutsukerralla aktivoituu ensimmäinen rivi. Perinteisesti vastausjoukkoa on voinut käydä läpi vain yhteen suuntaan: alusta loppuun uudemmissa versioissa on myös muita mahdollisuuksia 15 Tiedon saamiseksi aktivoidulta vastausriviltä ohjelman käyttöön on tarjolla tietotyyppikohtaiset hakufunktiot gettyyppi esim. getstring, getboolean, getint, getdate,. Näille funktioille annetaan parametrina joko sarakkeen nimi tai sarakkeen järjestysnumero esim: String a= rs.getstring( osoite ); // sarake osoite Int p= rs.getint(3); // kolmas sarake 16

Hakufunktiot kykenevät tekemään joitakin tietotyyppikonversioita, esim. merkkijonosta kokonaisluvuksi (jos kyseessä on kokonaisluku) tai päinvastoin. - Ellei konversio onnistu, aiheutetaan SQLException poikkeus - Sama poikkeus aiheutetaan myös muissa virhetilanteissa Tyhjäarvon testaamista varten on totuusarvoinen funktio wasnull. Tämä on parametroitu kuten getfunktiot. 17 Statement stmt= con.createstatement(); ResultSet rs= stmt.executequery( select nimi, osoite, palkka from henkilo + order by nimi ); while (rs.next()) { System.out.println(rs.getString(1) +, + rs.getstring(2)+, +rs.getstring(3)); } tulostaa muotoa : Lahtinen Kalle, Katu 6, 12000 Mäki Manu, Kuja5, 20000 18

Tietokannan sisältöä tai rakennetta muuttavat sql-operaatiot, jotka eivät tuota vastausta suoritetaan Statement.executeUpdateoperaatiolla. esim. Int muutettujariveja= stmt.executeupdate( update henkilo + set palkka= palkka + 10000 + where nimi= Laine Harri ); 19 Parametroidut operaatiot: Edellä on käsitelty yksinkertaisia tapauksia, joissa operaatio annetaan sellaisenaan suoritusfunktion parametrina. Usein kuitenkin samaa operaatiorunkoa käytetään uudelleen, mutta siten, että parametriarvot muuttuvat - esim. käyttäjältä kysytään henkilön nimi ja sitten kannasta haetaan tiedot tämän perusteella Tähän tarkoitukseen on tarjolla parametroitu operaatio PreparedStatement (Statement luokan aliluokka) 20

PreparedStatement pst = con.preparestatement( select nimi,osoite,palkka + from henkilo + where nimi like? ); Parametrin arvon asetukseen on käytössä tietotyyppikohtaiset asetusmetodit settyyppi (getfunktioita vastaten) Asetusmetodilla on kaksi parametria: SQL-operaation parametrin (kysymysmerkin) järjestysnumero ja tilalle tuleva arvo esim. pst.setstring(1, Möttö% ); 21 DriverManager getconnection Connection createstatement Statement registerdriver external driver preparestatement setxxxx PreparedStatement executequery next ResultSet getyyyy 22