Andmebaasiühendus MySQL-i serveriga.

Et andmeid ja tabeleid saaks kuhugi baasi paigutada, selleks peab kõigepealt andmebaas loodud olema. Mõnes paigas saab seda teha vaid administraatoriõigustes inimene, Windows 95 all võib aga igaüks omale kasutamiseks-katsetamiseks andmebaasiserveri püsti panna ning sinna nii palju baase luua kui kettamaht võimaldab. Eestimaal võib enesele MySQLi vahendid kopeerida http://mysql.tradenet.ee alt. Toimingute tegemiseks peab kõigepealt baasiserveri käima lükkama. Käsuks mysqld-shareware ning selle tulemusena hakkab server kuulama väratit 3306, kui pole määratud teisiti. Käsk mysqladmin lubab luua ja kaotada baase ning teha muudki korraldusega seonduvat. Siin luuakse baas nimega pood.

Kui aga soovida lihtsamalt läbi ajada, siis ei pea selleks mitte oma serverit püsti panema. Võib rahulikult toime tulla olemasolevate Accessi, Exceli või suisa tekstifaili draiveritega. Kui aga MySQL installeeritud, siis saab seda kasutada. Küllaltki universaalne koht andmebaasidele ligi pääsemiseks on ControlPanel'i alt avanev ODBC. Sealt alt on näha, millised ressursid juba kasutada on, samuti annab siit oma baasile ODBC ühendus luua, mille abil siis kergesti võib olemasolevate draiverite abil programmide kaudu sinna andmeid saatma ja sealt pärima hakata. Nimetatud vahelüli (Open DataBase Connectivity) on lihtsalt ühine protokoll, mille kaudu saavad suhelda osapooled, kes üksteise keelt ei tunne (pole otseühenduseks vastavaid draivereid).

Uue andmeallika loomiseks tuleb vajutada Add... ning pakutakse toetatavatest tüüpidest välja, millist kasutaja soovib luua. Kui siin näites soovime ühenduda MySQL-i baasiga, tuleb ka vastavat tüüpi draiver valida.

 

Draiveri juures tuleb määrata parameetrid. Vähemasti nimi, mille alt Windows'is vastavat andmeallikat tuntakse ning milline on tegelik baasi nimi serveris.

 

Kui kogu loomine läks õnnelikult, siis jõuame tagasi algse lehe juurde, kuhu on tekkinud ka vastloodud ühendus, siin näites nime all poebaas.

 

Edasi pole muud, kui asuda loodud ühendust kasutama. Baasi sisse võib tabeleid ja andmeid lisada mitut moodi. Accessi või Exceli puhul saab avada vastava programmi ning rahumeeli tähed ja numbrid tabelisse kirjutada. MySQLil oma kliendi kaudu saab ka baasi külge ühenduda ning seal SQL lausete abil soovitud muutusi tekitada. Kui tahta edaspidi panna oma programm baasi andmeid kasutama, siis on paslik alustada lühemast käsureast, mis parajasti baasi sisse ühe üheveerulise tabeli loob ning sinna sisse väärtuse paigutab. Võib ette kujutada, et tabelis on kirjas, mitu palli parajasti poe laos hoiul on.

Andmebaasiga suhtlemiseks tuleb kõigepealt mällu laadida draiver. ODBC tarvis on starndardkomplektis kaasas sun.jdbc.odbc.JdbcOdbcDriver. Luuakse ühendus, jättes kasutajanime ja parooli koht tühjaks, kuna meie katsebaasi puhul neid ei nõuta. Saadetakse käsklaused teele ning suletakse ühendus.

import java.sql.*;

public class Baasilooja1{

public static void main(String argumendid[]) throws Exception{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection cn=

DriverManager.getConnection("jdbc:odbc:poebaas", "", "");

Statement st=cn.createStatement();

String lause="CREATE TABLE pallid (kogus int);";

st.executeUpdate(lause);

lause="INSERT INTO pallid (kogus) values ('0');";

st.executeUpdate(lause);

cn.close();

}

}

Kui programmi tekst sisse kirjutatud, siis enne käivitamist tuleb see kompileerida ning seejärel käima lasta. Näidet vaadates paistab tulemus tühjavõitu olema. Kompileerimisel ei tulnud veateadet seetõttu, et ühtki viga ei leitud. Käivitamisel pole midagi näha, kuna kogu tegevus käis programmi ja baasi vahel ning polnud küsitud, et midagi ekraanile näidataks. Kui väljatrükilauseid vahele pikkida, eks siis oleks ka käivitajal rohkem midagi vaadata olnud.

Et töö siiski päris tühi ei olnud ja midagi ka toimus, sellest annab teada järgmine pilt. Kui ühenduda MySQLi kliendiga baasi taha ning uurida, mis seal sees paikneb, siis on näha, et tekkinud on tabel nimega pallid ning sinna sisse on koguseks pandud 0.

 

Servlet andmebaasi küljes

Baasis paiknevaid andmeid võib vaja olla mitmele poole välja anda. Veebi kaudu on hea andmeid lugeda ning sinna saatmiseks sobivad servletid ehk pisiprogrammikesed veebiserveris. Nagu varsti näha, võime soovi korral oma arvutisse http serveri püsti panna ning servletid andmebaasi andmeid lugema saata.

 

 

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.sql.*;

public class pallibaas1 extends HttpServlet{

public void doGet(HttpServletRequest kysimus,

HttpServletResponse vastus)

throws IOException, ServletException{

vastus.setContentType("text/plain");

PrintWriter valja=new PrintWriter(vastus.getWriter());

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection cn=

DriverManager.getConnection("jdbc:odbc:poebaas", "", "");

Statement st=cn.createStatement();

String lause="SELECT kogus FROM pallid;";

ResultSet rs=st.executeQuery(lause);

rs.next();

valja.println("Laos on "+rs.getInt("kogus")+" palli.");

}catch(Exception viga){

valja.println("Probleem andmebaasiga: " +viga);

}

}

}

Servlette suudab käivitada paarisajakilobaidine JSDK ning veidi suurem JSWDK, mõlemad enesele vabalt kopeeritavad. Ka hulga muid programme suudab Javakeelsete käsujadade tulemusi veebiserverist välja näidata nagu näiteks Tomcat või Resin, siin aga on piirdutud pisimaga. Servlettide kompileerimiseks ja käivitamiseks peavad olema kättesaadavad klassid, mis standardis ei sisaldu, kuid servleti tööks vaja lähevad. Need klassid leiab veebiserveriga kaasa tuleva ühe arhiivina nimega servlet.jar . Et kompilaator suudaks üles leida nii kirjutatud lähtekoodi kui lisaklassid selleks on üks moodus kopeerida servlet.jar lähtekoodiga samasse kataloogi ning ning määrata CLASSPATH'i otsinguteeks servlet.jar;. , see tähendab, et klasse otsitakse nii jooksvast kataloogist kui failist servlet.jar.

 

Servletid paigutatakse soovitud kataloogi alamkataloogi Web-inf\servlets, sealt oskab veebiserver neid leida. JSDK käivitub käsuga startserver ning kui kõik õnnestub, peaks pärast käivitamist näha olema, et programm asus väratit kuulama ning ootab kasutajaid, kes veebi pealt andmete vastu huvi tunneksid.

Igal serveril veidi isemoodi, kuid pea igal pool leidub konfiguratsioonifail, kust saab sättida, millist väratit server kuulab, millist kataloogi loetakse veebi juurkataloogiks ning kas ja kust kõrvalt on sinna andmeid juurde lisatud. Kui soovida midagi muuta, tuleb see sinna faili kirjutada ning seejärel server uuesti käivitada.

Kui kõik läks õnnelikult, siis peaks seiluriaknas näha olema servleti töö tulemus.

 

Otsene draiver

DBC võimaldab omavahel suhelda paljudel programmidel ning protokollidel, kuid selle puuduste juurde kuulub, et tegemist on veel ühe järjekordse vahelüliga, mis enesele ressursse nõuab ning nagu pudelikael ikka ei pruugi see mitte kõiki häid omadusi läbi lasta, mis kummalgi osapoolel olemas võivad olla. Sellepärast, kui on tegemist tohutute andmehulkade või suurte kiirustega, on mõistlik otsida programmi ja andmebaasi vahele otsest draiverit. Üks Javat ning MySQLi ühendav tükk leidus näiteks lehel

http://mmmysql.sourceforge.net/

Kui sealne arhiiv maha laadida ning lahti pakkida, tekkis kataloog, milles nii draiver ise kui hulga õpetusi, kuidas temaga ümber käia.

Kirjadest selgus, et muuta polegi vaja muud kui draiveri nime ning ühenduse URLi. Nüüd saab kirjutada otse jdbc:mysql: .

import java.sql.*;

public class Pallibaas2{

public static void main(String argumendid[]) throws Exception{

Class.forName("org.gjt.mm.mysql.Driver");

Connection cn=DriverManager.getConnection(

"jdbc:mysql:/localhost/pood", "", "");

Statement st=cn.createStatement();

String lause="SELECT kogus FROM pallid;";

ResultSet rs=st.executeQuery(lause);

rs.next();

System.out.println("Baasis on "+rs.getInt("kogus")+" palli");

cn.close();

}

}

Kui programm panna tööle draiveri kodukataloogis, siis leitakse ise kõik sobivad klassid üles, sest nad on seal lihtsalt käe-jala juures.

Soovides aga kohaleveetud draiverit kusagil mujal kasutada, selleks tuleb draiveri klassid arhiividena kaasa võtta ning käivitamisel –classpath abil öelda, millistest arhiividest draiveri osad kokku korjata tuleb.

 

Head andmevahetust.