Luento 10
Tietokantasovellusten rakentaminen
Tietokannat ja WWW
Open Database Connectivity (ODBC) ja OLE DB
ODBC on rajapinta SQL-sovellusten ohjelmointiin
Windows-ympäristöissä
OLE DB on rajapinta mihin tahansa tietoon.
- Sovellus käyttää ODBC:n standardoituja funktioita, jotka
tulkitsevat SQL-komennot tietokannan ymmärtämään muotoon.
- Sovelluksen ei tarvitse tukea erikseen mitään tiettyä
tietokantasovellusta
ODBC Query Tool
Java Database Connectivity (JDBC)
Java-ohjelmien käyttöön tarkoitettu standardoitu
tietokantaliittymärajapinta. JDBC on puhtaasti oliopohjainen.
JDBC-esimerkki
- Tietokantojen sisällön tarjoaminen
- WWW-hakukoneet
- Tietojen kerääminen
- Dynaamiset WWW-sivut
- Kustomoitavat WWW-sivut
Tavallinen yhteys WWW-palvelimen (tietokannan) ja selaimen
välillä
- yhteys ei ole jatkuva vaan muodostetaan aina vain
tarvittaessa

- ei erottelua eri käyttäjien välillä
- sessio
- eväste (keksi, cookie)
- dynaamiset URL:t
- Suurimmat ongelmat erityisesti tietojen muuttamisen
yhteydessä
- aikalukot erityisen tärkeitä
Suora yhteys selaimelta tietokantaan

- JDBC
- vaatii selaimelta Java-tuen
- Javan tietoturvamääritykset
java.sql.Statement stmt = conn.createStatement();
ResultSet r = stmt.executeQuery("SELECT a,b,c FROM Taulu");
while (r.next()) {
int i = r.getInt("a");
String s = r.getString("b");
byte b[] = r.getBytes("c");
System.out.println("ROW = "+i+" "+s+" "+b[0]);
}
- RDS
- toimii vain microsoftin internet explorerilla
- Vaatii toimiakseen selaimessa käytettäviä Active X -objekteja
-> tietoturvariskit
Tietokantapohjaisen WWW-sovelluksen rakentaminen
-
ASP ja ADO

ActiveX Data Objects -mallin yleiskäyttöiset luokat:
- Connection - luo yhteyden tietokantaan
- Command - käytetään kyselyjen suorittamiseen
- Recordset - tallettaa kyselyjen tulokset
Luodaan Command-objekti ja tehdään sen avulla DELETE-operaatio.
<%
Set Command = Server.CreateObject("ADODB.Command")
Command.ActiveConnection = ConnectionString
Command.CommandText = "DELETE FROM Taulu"
RecordsAffected = 0
Command.Execute(RecordsAffected)
%>
Haetaan Recordset-objectin avulla tietoja tietokannasta
<%
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open "SELECT * FROM Oppilaat ORDER BY sukunimi", _
ConnectionString, 0, 1
if (Rs.BOF AND Rs.EOF) then
Response.Write "Ei yhtään opiskelijaa<br>"
exit sub
end if
Do While Rs.EOF = false
%>
<tr>
<td><%=counter%></td>
<td><%=Rs("sukunimi")%> </td>
<td><%=Rs("etunimi")%> </td>
<td><a href="mailto:<%=Rs("sähköpostiosoite")%>">
<%=Rs("sähköpostiosoite")%> </a></td>
<td><%=Rs("koulutusohjelma")%> </td>
</tr>
<%
Rs.MoveNext
Loop
%>
Perl ja WIN32::ODBC Esimerkkidata
Perl ja DBI
PHP3 ja MySQL Lähdekoodi
Tietokantasovelluksen rakentaminen MS Accessillla
Taulut ja kentät
Yleiset ominaisuudet
- Field Size (Kentän koko)
- Määrittelee kentän maksimipituuden tekstikentille. Numerokentille määrittelee talletustarkkuuden.
- Format (Muoto)
- Määrittelee millä tavalla muotoiltuna kentän sisältö esitetään.
- Decimal Places (Desimaalipaikat)
- Näytettävien desimaalien määrä.
- Input Mask (Syöttörajoite)
- Määrittelee muodon jossa tieto on kenttään syötettävä.
- Caption (Otsikko)
- Esitettävä otsikko, jos se on muu kuin kentän nimi.
- Default Value (Oletusarvo)
- Kenttään valmiiksi tuleva oletusarvo.
- Validation Rule(Kelpoisuussääntö)
- Kentälle määriteltävät oikeellisuustarkistukset.
- Validation Text (Kelpoisuussäännön kuvaus)
- Teksti, joka näytetään jos käyttäjä syöttää jotakin
oikeellisuustarkistuksien vastaista.
- Required (Arvo tarvitaan)
- Määrittelee onko kenttää pakko täyttää. Kentät kannattaa lähes aina
määritellä pakollisiksi.
- Indexed (Indeksoitu)
- Määrittelee luodaanko kentän pohjalta hakuja nopeuttava hakemisto.
Hakutaulu
- Display Control (Näytönohjausobjekti)
- Määrittelee näytetäänkö kenttä tavallisena muokkausruutuna(inputbox),
luetteloruutuna(listbox) vai yhdistelmäruutuna (combobox)
- Row Source Type (Rivilähteen tyyppi)
- Määrittelee mistä syötettävät arvot haetaan. Vaihtoehtoina ovat joko jonkin
taulun tai kyselyn sisältämät arvot (Table/Query),
itsemääritelty luettelo
kelpaavista arvoista (value list) tai jonkin taulun
kenttäluettelo (Field list)
- Row Source (Rivilähde)
- Määrittelee lähteenä käytetyn taulun/haun nimen tai itsesyötetyt arvot
- Bound Column (Sidossarake)
- Kuinka mones kenttä hakutaulussa sisältää halutun tiedon
- Column Count (Sarakkeiden lukumäärä)
- Monta kenttää näytetään hakutaulusta
- Column Heads (Sarakkeiden otsikot)
- Näytetäänkö kenttien otsikot
- Column Widths (Sarakeleveys)
- Näytettävien kenttien leveydet ; eroteltuina. 0-levyiset kentät piilotetaan.
- List Rows (Luettelon rivien määrä)
- Montako riviä näytetään listassa kerrallaan
- List Width (Luettelon leveys)
- alasvetovalikon leveys
- Limit To List (Vain luettelon käyttö)
- Kelpuutetaanko käyttäjän omat syötteet, jotka eivät ole samoja kuin hakutaulun sisältö.
Lomakkeet
Dynaamiset SQL-kyselyt
Raportit