Java - Tietokanta. JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
Minimaalinen Java-ohjelma •Kaikki ohjelmakoodi on luokkamäärityksen sisällä •Ohjelma käynnistyy ”public static void main(String[] args)”-metodista •System.out.print()
Olio-ohjelmoinnin perusteet luento 3: Muuttujista ja funktioista Sami Jantunen LTY/Tietotekniikan osasto.
6. Metodit.
@ Leena Lahtinen Helia TIETO JA TIETOKONEOHJELMA  TIETOKONEOHJELMA KÄSITTELEE TIETOJA  TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA.
© Jukka Harju, Viittausmuuttujat. © Jukka Harju, Viittaukset •Viittausmuuttuja sisältää tiedon siitä missä muistipaikassa olio.
© Jukka Harju, Jukka Juslin1 Java-ohjelmointi opas ammattimaiseen osaamiseen Luku 6 (osittain) Tiedostot.
© 2004 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice Java-perusteet Kari Kujansuu
Jukka Juslin Poikkeukset ja niiden paikallistaminen * Jukka Juslin * Liittyy oppikirjan lukuun 11.
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
22. Taulukot.
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.

Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
VB:n tietokantakäsittely
© Jukka Harju, Jukka Juslin Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 9 Poikkeuskäsittely.
Poikkeustenkäsittely  Mitä poikkeustenkäsittely tarkoittaa?  Poikkeuksen käsitteleminen  Poikkeusluokkien hierarkia  Poikkeuksen heittäminen 1.
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
© Jukka Harju, Jukka Juslin
7. Oliot ja viitteet.
Map-luokka Mikä Map on? Mapin esittely ja luonti Map-luokan metodeja Mappiin lisääminen Mapin läpikäynti Mapista poistaminen 1.
11. Javan toistorakenteet
Kuinka niitä käsitellään
1 DataOutputStream ja DataInputStream DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon DataInputStream:lla.
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
5. Kapselointi Yleistä Kapseloinnilla (encapsulation) tarkoitetaan luokan tietojen ja toimintojen pakkaamista yhdeksi suojatuksi kokonaisuudeksi.
10. Abstrakti luokka Johdanto Abstrakti luokka (abstract class) poikkeaa konkreettisesta luokasta (ei-abstrakti luokka) siten, että siitä ei.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Näppäimistöltä lukeminen Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
22. Taulukot.
Poikkeukset Yleistä Virheeseen varautuminen tarkoittaa sitä, että ohjelmoija huomioi koodia kirjoittaessaan ajonaikaisen virheen mahdollisuuden.
© Jukka Juslin1 Tiedostot Tuloksellinen Java-ohjelmointi.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
4.2-Sulautettu SQL Teuhola Sulautettu (embedded) SQL Ohjelmointikielen (ns. isäntäkielen) laajennus ISO-standardi, määritelty kielille Ada,
DO NOT PRINT THIS DOCUMENT SQL -valintaehto CREATE TABLE opettaja ( opetunnus varchar(12) NOT NULL, nimi varchar(40) NOT NULL, puhelin varchar(12), tyohuone.
Olioiden taulukointi Perustaulukon käyttö Luokan ilmentymät voidaan tallettaa taulukkoon samoin kuin muuttujat Esimerkki talletetaan taulukkoon opintojaksojen.
Tietokantayhteys / DSN DSN (Data Source Name), eli ennalta määritelty ja nimetty tietokantayhteys.
Tietokantayhteys / DSN DSN (Data Source Name), eli ennalta määritelty ja nimetty tietokantayhteys.
Ydinpalveluiden (käyttäjä, käyttöoikeus, potilas).NET-palvelutoteutus: CoreServiceDemo PlugIT-loppuseminaari Koulutustyöpaja 1: Avoimet ohjelmistorajapinnat.
Javan oliovirrat eli oliotiedostojen käsittely. Olio- eli objektitiedostojen käsittely Käsittely täysin samanlaista kuin muiden tiedostojen 1.Otetaan.
1 © Jukka Juslin Luokat, attribuutit ja metodit Yleistietoa: seuraavalla koulutusviikolla tarkempi käsittely.
14. Poikkeukset Sisällys Johdanto poikkeuksiin. Poikkeusten käsittely: − Poikkeusten käsittely paikallisesti. − Poikkeusten heittäminen. Exception.
Sähköpostin lähetys Java- ohjelmasta Jukka Juslin.
15. Ohjelmoinnin tekniikkaa
Harjoitus 1 Perusta uusi projekti. Hae projektin kansioon NWIND.mdb. Ota kantaan yhteys. Tulosta comboboxiin rahtarien(Shippers) nimet.
Tiedostot. 8.2 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen.
5. Kapselointi.
6. Tiedostot.
2. Taulukot.
14. Poikkeukset.
Kuinka niitä käsitellään
4. Komentoriviparametrit
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
Kuinka niitä käsitellään
2. Taulukot.
Jouni Juntunen Oulun seudun ammattikorkeakoulu Liiketalouden yksikkö
3. Komentoriviparametrit
14. Poikkeukset.
3. Attribuutit.
14. Poikkeukset.
4. Luokan testaus ja käyttö olion kautta
eli oliotiedostojen käsittely
Esityksen transkriptio:

Java - Tietokanta

JDBC=Java database connectivity  ODBC:n kaltainen ohjelmointiliittymä SQL- tietokantoihin  Koostuu Java-kehitysympäristön (esim. Sunin JDK) mukana toimitettavasta JDBC- rajapinnasta ja tietokantakohtaisesta JDBC- ajurista.  Voidaan käyttää sekä kaksi- että monitasoisena

JDBC-Ajurit, 4 vaihtoehtoa 1. JDBC-ODBC silta 2. Osittain Javalla toteutettu, tietokannan verkkoprotokollaa käyttävä ajuri 3. Puhdas java-ajuri omalla verkkoprotokollalla 4. Puhdas java-ajuri tietokantakohtaisella verkkoprotokollalla

Yhteyden muodostaminen kantaan  Yhteys tietokantaan muodostetaan JDBC-ajurin sisältämien Driver-interfacen ja DriverManager- luokan avulla.  Muodostunutta yhteyttä voidaan käsitellä Connection-interfacella.

Yhteyden hallinta Connection interfacella  Connection interface sisältää funktioita yhteyden ja tapahtumien käsittelyyn: 1.close(), isClosed() 2.getMetadata() 3.commit(), rollback() 4.createStatement(), prepareStatement(); 5.Erityisen tärkeää muistaa Connection – olion sulkeminen: objConn.close(); Etteivät yhteydet jää roikkumaan!

Tarvittavat objektit  Tarvitaan tietokantayhteyden toimittaja. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver”);  Tarvitaan yhteysobjekti. (objConn) String connString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=../Ilmo.mdb”; Connection objConn = DriverManager.getConnection(connString,"","");

Tarvittavat objektit...  Tarvitaan kyselijä. Statement stmt = objConn.createStatement  Tarvitaan tietuejoukko-objekti. String sqlStr = "SELECT * FROM Opettaja"; ResultSet objRS = stmt.executeQuery(sqlStr);

Yhteyden määrittely 1. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver”); 2. String connString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=../Ilmo.mdb”; 3. Connection objConn = DriverManager.getConnection(connString,"",""); 4. Statement stmt = objConn.createStatement(); 5. String sqlStr = "SELECT * FROM Opettaja"; 6. ResultSet objRS = stmt.executeQuery(sqlStr);

1. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver”);  Valitaan yhteyden toimittaja Java DataBase Connectivity Open DataBase Connectivity Ota annettuna

2+3. Connection objConn  Luodaan yhteysobjekti objConn Connection objConn = DriverManager.getConnection(connString,"",""); connString  jdbc:odbc:kanta (protokolla:aliprotokolla:tietolähde)  kanta -> kerrotaan joko DSN:n nimi tai Driver ja tietokannan nimi ja sijainti.,”tunnus”,”salasana”  jos tyhjiä, niin ei määriteltyjä

4. Statement stmt = objConn.createStatement();  Esitellään kyselijä –olio Lähettää SQL –lauseen tietokantapalvelimelle erityisellä executeXXX() metodilla

5+6. ResultSet objRS  Luodaan tietuejoukko-objekti objRS ja tehdään tietokantakysely ResultSet objRS = stmt.executeQuery(sqlStr); stmt.  executeQuery() –Tietokantakysely -> SELECT  executeUpdate() –Tietojen päivitys -> muut sqlStr  Varsinainen suoritettava SQL-lause

import java.sql.*; public class Yhteys { public static void main(String[] args) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String connString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=../Ilmo.mdb"; Connection objConn = DriverManager.getConnection(connString,"",""); Statement stmt = objConn.createStatement(); String sqlStr = "SELECT * FROM Opettaja"; ResultSet objRS = stmt.executeQuery(sqlStr); while (objRS.next()){ System.out.print(objRS.getString(1)); } objRS.close(); if (objConn!=null){ objConn.close(); } } catch (Exception e) { e.printStackTrace(); }}}

Tietueiden käsittely  Opettaja taulun 1. sarake kertoo opettajan lyhenteen. Lyhenne saadaan: objRS.getString(1) tai objRS.getString(”Opettaja_id”) Indeksointi alkaa numerosta 1 (VB 0) HUOM! Suosi getString() –metodia, koska sillä voidaan hakea lähes minkä tahansa tietotyypin dataa  Muita getXXX() –metodeja getInt() getFloat() getDouble() getDate()

Tietueiden läpikäynti  objRS.next() –metodi siirtää kursorin taulun 1.riville ja käy taulun läpi palauttaen jokaiselta riviltä true. Kun kursori ohittaa viimeisen rivin metodi palauttaa false. while (objRS.next()){... }

Metadata  Metadatalla tarkoitetaan tietoa tiedosta  ResultSetMetaData –oliolla saadaan tietoa mm. taulun kenttien nimistä, lukumäärästä ja tietotyypeistä.

Metadata... ResultSetMetaData metaData = objRS.getMetaData();  metaData.getColumnCount(); palauttaa taulun kenttien lukumäärän  metaData.getColumnName(); palauttaa taulun kenttien nimet  metaData.getColumnTypeName(1); palauttaa taulun 1.kentän tietotyypin tekstinä

Kaikkien kenttien läpikäynti ResultSetMetaData metaData; metaData = objRS.getMetaData(); int kentat = metaData.getColumnCount(); while (objRS.next()){ for(int i=1;i<=kentat;i++){ objRS.getString(i) }

Harjoitus  Tee aliohjelma tulosta(), jolla tulostat kaikki tiedot opettajataulusta konsoliin  Ohjelmaa kutsutaa pääohjelmasta  Esittele muuttujat siten, että niitä voidaan käyttää myös kyseisen aliohjelman ulkopuolella

Esitellään muuttujat import java.sql.*; import javax.swing.*; public class Yhteys { static String connString = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=../Ilmo.mdb static Connection objConn; static Statement stmt; static String sqlStr; static ResultSet objRS; static ResultSetMetaData metaData; }

Aliohjelma: public static void tulosta(){ try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(); sqlStr = "SELECT * FROM Opettaja"; objRS = stmt.executeQuery(sqlStr); metaData = objRS.getMetaData(); while (objRS.next()){ for (int i=1; i <= metaData.getColumnCount();++i){ System.out.print(objRS.getString(i) + "\t"); } System.out.println(); } objRS.close(); } catch (Exception e) { e.printStackTrace(); }} }

Vieritettävä tulosjoukko  Mikäli createStatement -metodia kutsutaan ilman parametrejä, voidaan tietuejoukko- objektin tietueita selata vain eteenpäin. stmt = objConn.createStatement();  Mikäli tietueita halutaan selata myös taaksepäin, tulee parametreinä antaa; 1.tietueiden vierityssuunta 2.tietueiden päivitettävyys (kyllä/ei)

Vieritettävä tulosjoukko  JDBC 2.0 mahdollistaa tietyissä tapauksissa kursorin liikuttamisen eri kohtiin hakutulosjoukossa eli ResultSetissä. Tällaista tulosjoukkoa voidaan kutsua vieritettäväksi tulosjoukoksi ja sen käyttö on mahdollista, jos JDBC 2.0 –ajuri tukee vieritettävää tulosjoukkoa käytettävissä olevalle kannalle.  Käytettäessä vieritettävää tulosjoukkoa voidaan määrätä, millaisella kursorilla joukossa liikutaan ja pystytäänkö joukon sisältämää dataa muokkaamaan.

Vieritettävä tulosjoukko Esim. Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executeQuery(query);

Vieritettävä tulosjoukko 1.TYPE_SCROLL_FORWARD_ONLY = (default) Ei vieritettävä, kursori vain eteenpäin, tehdyt päivitykset tapahtuvat kun tulosjoukko suljetaan, tai avataan uudelleen. 2.TYPE_SCROLL_INSENSITIVE = Vieritettävä, tehdyt päivitykset tapahtuvat kun tulosjoukko suljetaan, tai avataan uudelleen. 3.TYPE_SCROLL_SENSITIVE = Vieritettävä, tehdyt päivitykset tapahtuvat välittömästi

Vieritettävä tulosjoukko  CONCUR_READ_ONLY = vain lukua varten.  CONCUR_UPDATABLE = (default) Myös päivitykset mahdollisia

Vieritettävä tulosjoukko  Liikkuminen vieritettävässä tulosjoukossa tapahtuu seuraavilla metodeilla: objRS.next(); = aina käytössä, oli vieritettävä tai ei, hyppää seuraavalle riville objRS.previous(); = hyppää edelliselle riville objRS.beforeFirst(); = vie kursorin ennen ensimmäistä riviä objRS.afterLast(); = vie kursorin viimeisen rivin jälkeen objRS.absolute(int muutos); = annetaan muutos edelliseen riviin, positiivinen kokonaisluku eteenpäin tai negatiivinen kokonaisluku taaksepäin esim. 8 tai –6.  Kaikki liikkumismetodit palauttavat false, jos mennään yli tulosjoukon rajojen!  Kursorin sijainti vieritettävässä tulosjoukossa: objRS.getRow(); objRS.isLast(); objRS.isFirst(); objRS.isAfterLast(); (EOF)objRS.isBeforeFirst(); (BOF)

Tietueen lisääminen  Kaksi vaihtoehtoa: 1. Lisäys SQL –lauseen ja executeUpdate()metodin avulla 2. Lisäys SQL –lauseen ja tietuejoukko- objektin objRS:n avulla

Lisäys (SQL –lause ja executeUpdate()) objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(); sqlStr = "INSERT INTO Opettaja VALUES('"+tunnus+"', '"+etuNimi+"','"+sukuNimi+"','"+ +"')"; stmt.executeUpdate(sqlStr); stmt.close();

Lisäys ( objRS –tietuejoukko-objekti) objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); sqlStr = "SELECT * FROM Opettaja"; objRS = stmt.executeQuery(sqlStr); objRS.moveToInsertRow(); //Kursori tyhjälle riville objRS.updateString("Opettaja_id",tunnus);//Kenttä,arvo objRS.updateString("Etunimi",etuNimi); //Kenttä,arvo objRS.updateString("Sukunimi",sukuNimi); //Kenttä,arvo objRS.updateString("E_mail", ); //Kenttä,arvo objRS.insertRow();//Päivitä tiedot riville objRS.close();

Harjoitus  Tee ohjelma, jolla voit lisätä opettajatietoja tietokantaan.  Tiedot voit kerätä vaikka inputboxeilla  Huomioi pakolliset tiedot ja virheenkäsittely

Tietueen Muuttaminen  Kaksi vaihtoehtoa: 1. Muutos SQL –lauseen ja executeUpdate()metodin avulla 2. Muutos SQL –lauseen ja tietuejoukko- objektin objRS:n avulla

Muutos (SQL –lause ja executeUpdate()) objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(); sqlStr = ”UPDATE Opettaja SET WHERE Opettaja_id=’KOE’”; stmt.executeUpdate(sqlStr); stmt.close();

Muutos ( objRS –tietuejoukko-objekti) objConn = DriverManager.getConnection(connString,"",""); stmt = objConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); sqlStr = "SELECT * FROM Opettaja WHERE Opettaja_id=’KOE’ "; objRS = stmt.executeQuery(sqlStr); objRS.first();//Kursori 1.riville objRS.updateString("E_mail", ); //Kenttä,arvo objRS.updateRow();//Päivitä rivin tiedot objRS.close();

Harjoitus  Tee ohjelma, jolla voit muuttaa opettajan tietoja tietokannassa  Kysy ensin muutettavan opettajan Opettaja_id inputboxilla  Tarkista ensin, että Opettaja_id löytyy if(objRS.isBeforeFirst()==true){}  Tiedot voit muuttaa vaikka inputboxeilla  Huomioi pakolliset tiedot ja virheenkäsittely