Pristup bazama podataka

Embed Size (px)

Citation preview

  • 7/25/2019 Pristup bazama podataka

    1/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    PREDMET:Pouzdanost i kontrola kvalitete softvera NASTAVNI ANSAMBL:

    AK. GOD. :2015/2016 PROFESOR:Denana onko ([email protected])

    RESURS:Laboratorijska vjeba 10Pristup bazi ASISTENT:Emir Cogo ([email protected])DATUM OBJAVE:08.01.2016

    Cilj vjebi:

    Upoznavanje sa bazama podatakaOsnovni Pojmovi ERD i koncepti SQL

    Instalacija i podeavanje MySQL baze podataka sa Visual Studio-om Rad sa bazom iDataGridViewkontrolom

    Napomena: Prije izrade vjebe je obavezno proitati predavanja vezana za tematsku jedinicu

    Pristup Bazama Podataka.

    LABORATORIJSKA VJEBA 10

    Pristup bazama podataka (MySQL) - AiE

    Upoznavanje sa bazama podatakaOsnovni pojmovi

    Podatakje poznata injenica koja moe biti zapisana i koja ima implicitno znaenje. Podacise mogu uvati na razne naine: buene paprine kartice ili trake (neelektronsko uvanje),diskovi, trake, CD-ovi, DVD-ovi itd. Pri elektronskom snimanju, podaci se obino organizujuu datoteke,a datoteke mogu biti klasine(binarne, XML i sl.) i datoteke koje su organizovane

    u baze podataka. Shodno tome, baza podatakapredstavlja jedan aspekt tj. apstrakciju realnogdijela svijeta. Promjene u tom dijelu svijeta se reflektuju na bazi podataka. Sama baza

    podataka je dizajnirana, izgraena i napunjena sa podacima za specifinu namjenu.

    DBMS(eng. skr. DataBase Managment System) ili sistem za upravljanje bazom podataka je

    skup porgrama koji omoguuju korisniku da kreira i odrava bazu podataka. To je softverskisistem generalne namjene koji omoguava definisanje, konstukciju i manipulisanje nad

    podacima smjetenim u bazu za razliite svrhe. Definisanje baze ukljuuje: specificiranjetipova podataka, strutkuru podataka, uslova koji podaci moraju da zadovolje. Postoje razliite

    baze podataka i to: hijerarhijske, mrene, relacione, objektno-relacione i objekte. Danas sunajkompaktnije i najvie koritene(99%) relacione, pa e se i ovaj predmet baviti tom vrstom

    baza podataka. Osnovni pojmovi vezani za ove vrste baza podataka su :

    Entitetobjekat ili koncept iz realnog svijeta (Student,Zaposleni, Odsjekitd.) Atributosobina entiteta i ima svoj naziv i tip (Ime,Prezime, Plaa, Ocjenaitd.) Vezaveza ili odnos izmeu entiteta (Student je upisanna fakultet ili zaposleni radi

    na fakultetu itd.)

  • 7/25/2019 Pristup bazama podataka

    2/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    ERD i koncepti SQL

    ERD(eng. skr. Entity Relationship Diagram) predstavlja nain modeliranja baza podataka tj.njihove strukture. Prikaz jednog takvog dijagrama je dat u nastavku:

    SQL (eng. skr. Structured Query Language) je jezik posebne namjene dizajniran za

    upravljanje podacima koji su smjeteni u relacionim bazama podataka. Uglavnom se sintaksaovih jezika minorno razlikuje u ovisnosti koji se DBMS koristi (MySQL, Oracle, PostgreSQL

    itd.), ali je osnova uglavnom ista. Komande i njihova sintaksa su dati u nastavku:

    SELECTPrikaz podataka iz baze:SELECT [*]ili [ime_kolone], [ime_kolone]

    FROM [ime_tabele_u_bazi]ili [ime_baze.ime_tabele_u_bazi]

    WHERE [ime_kolone zadovoljava neki uslov] // npr. id = 1 ili ime LIKE 'Haris'

    ORDER BY [ime_kolone_po_kojoj_sortiramo] ASC ili DESC;

    INSERTUnos novih redova:INSERT INTO [ime_tabele(kolona1, kolona2, kolona3...)]

    VALUES [(vrijednost_za_kolonu1, vrijednost_za_kolonu2, vrijednost_za_kolonu3)];

    UPDATEPromjena postojeih podataka:UPDATE [ime_tabele]

    SET [kolona1=vrijednost1, kolona2=vrijednost2, kolona3=vrijednost3...]

    WHERE [ime_kolone zadovoljava neki uslov]; // npr. id=3 za specifinu osobu

    DELETEBrisanje podataka:DELETE FROM [ime_tabele]

    WHERE [ime_kolone zadovoljava neki uslov]; // npr. id=5 za specifinu osobu

  • 7/25/2019 Pristup bazama podataka

    3/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Instalacija i podeavanje MySQL baze podatakasa Visual Studio-om

    Za ispravno podeavanje Microsoft Visual Studio i MySQL baze podataka potrebno je skinutii instalirati sljedei softver :

    1.

    WAMP server :http://www.wampserver.com/en/za MySQL bazu podataka.2. MySQL Installer :https://dev.mysql.com/downloads/installer/

    Napomena:U sluaju da installer ne prepoznaje nita i nudi vam samo opciju upgradebez ijedne ponuene stavke, zasebno skinite MySQL Connector/NET :

    https://dev.mysql.com/downloads/connector/net/6.9.html

    3. Ako vam u procesu kreiranja konekcije ne bude ponuena opcija za kreiranje naMySQL bazu podataka, instalirajte sljedei plugin:http://cl.ly/JqXO i on e popravitistvari.

    http://www.wampserver.com/en/http://www.wampserver.com/en/http://www.wampserver.com/en/https://dev.mysql.com/downloads/installer/https://dev.mysql.com/downloads/installer/https://dev.mysql.com/downloads/installer/https://dev.mysql.com/downloads/connector/net/6.9.htmlhttps://dev.mysql.com/downloads/connector/net/6.9.htmlhttp://cl.ly/JqXOhttp://cl.ly/JqXOhttp://cl.ly/JqXOhttp://cl.ly/JqXOhttps://dev.mysql.com/downloads/connector/net/6.9.htmlhttps://dev.mysql.com/downloads/installer/http://www.wampserver.com/en/
  • 7/25/2019 Pristup bazama podataka

    4/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Kada smo instalirali sve to nam je potrebno, kreirajmo poe tnu bazu podataka. Kadapokrenete WAMP server u desnom oku ekrana e vam se pokazati ikonica na koju trebatekliknuti i izabrati opciju phpMyAdmin. To je vizualni browser alat za kreiranje tabela i

    njihovu manipulaciju.

    Kada otvorimo phpMyAdmin, otvorit e nam se poetna stranica i da bi smo kreirali novubazu podataka potrebno je unijeti njeno ime i kodiranje karaktera. Za koritenje naihkaraktera odabrati utf8_slovenian_cikodiranje.

  • 7/25/2019 Pristup bazama podataka

    5/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Nakon toga kreirajmo prvu tabelu. Za na primjer to e biti tabela Studentisa 5 kolona.

    Kada smo definisali strukturu tabele, sada prelazimo na definiciju strukture njenih kolona. U

    prvom, Name dijelu unosimo imena kolona. Unijeli smo ID kao jedinstvenu ifru, ime iprezime, datum rodjenja i godinu studija. Takoe smo postavili i tipove tih kolona. Ako je upitanju cijeli broj tip je INT, ako je u pitanju tekstualno polje tip je VARCHAR, a ako je u

    pitanju datum tip je DATE. U drugom,Lengthdijelu unosimo duinu prije svega tekstualnihpolja. Sa slike vidimo da ime i prezime mogu sadravati tekst do 30 karaktera. Za INT i

    DATE ova polja nije potrebno postavljati. U treem, AI dijelu to je skraeno za AutoIncrement, imamo checkboxkojeg ako ekiramo, ta vrijednost tog polja (kod nas je to ID) eii od 0 i za svaki red e se sama postavljati uveana za 1 u odnosu na prethodnu vrijednost.Ostala polja nije potrebno mijenjati. Kliknemo na Savei imamo kreiranu tabelu. Sada nam jo

    preostaje da je popunimo iz forme koju emo kreirati u nastavku.

  • 7/25/2019 Pristup bazama podataka

    6/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Kreirajmo formu sljedeeg izgleda:

    Nakon to smo zavrili sa kreiranjem forme, vrijeme je da nae rijeenje poveemo sa bazompodatka. To se radi na sljedei nain. Sa glavnog menija odaberemo View-Other Windows-Data Sources.

    Kada smo odabrali navedeni pogled, u donjem lijevom oku (ili negdje drugo, zavisno odpostavljenog layout-a) e nam se pojaviti odgovarajui prozor. Na njemu trebamo odabratiopciju Add New Data Source. Kada je odaberemo pojavit e nam se dijalog preko kojegkonfiguriemo i biramo bazu podataka koju elimo. Bi tno je napomenut i da WAMP servermora biti pokrenut tokom ovog procesa, inae Visual Studio nee moi prepoznati nijednu

    trenutno aktivnu bazu podataka.

  • 7/25/2019 Pristup bazama podataka

    7/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Sljedei korak nam je popunjavanje podataka o samoj bazi. Inicijalno na WAMP serveru nijepostavljen nikakv user, pa su generini podaci sljedei server name: localhost, username:

    root, password: [ prazno]. Kada ispravno unesemo podatke, u comboBox-u dobijemo spisaksvih dostupnih baza podataka. Odaberemo konekciiju, kliknemo Test da provjerimo, pa OK.

  • 7/25/2019 Pristup bazama podataka

    8/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    KliknemoNext, ekiramo checkBox Tablesda bi mogli koristiti tabele, te kliknemo Finishdazvrimo cijelu proceduru.

  • 7/25/2019 Pristup bazama podataka

    9/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Nakon itave procedure, vidimo da nam se u otvorenom prozoru Data Sourcespojavila emanae baze podataka. Ako smo kreirali dodatnu tabelu, kliknemo na opciju Configure DataSource With Wizardi onda nam se ova struktura osvjei.

    Sada smo povezali Visual Studio sa konkretnom tabelom iz MySQL baze podataka i spremni

    smo da nastavimo kreiranjem naeg rijeenja.

    Rad sa bazom i DataGridViewkontrolom

    Krenimo sa ubacivanjem novih redova u bazu podataka. Kreirajmo odziv na klik dugmeta za

    Insert. Kd je sljedei:

    privatevoidbutton1_Click(objectsender, EventArgse)

    {MySqlConnectionkonekcija = newMySqlConnection("server=localhost;User

    Id=root;database=mojabaza");

    MySqlCommandkomanda = newMySqlCommand();komanda.CommandText = "INSERT INTO mojabaza.studenti(ime,prezime,roden,godina)

    VALUES('"+ tbIME.Text + "','"+ tbPREZIME.Text + "','"+

    Convert.ToString(dtpDATUM.Value.Year) + "-"+ Convert.ToString(dtpDATUM.Value.Month) +"-"+ Convert.ToString(dtpDATUM.Value.Day) + "','"+ Convert.ToString(nudGODINA.Value)

    + "');";komanda.Connection = konekcija;

    konekcija.Open();

    try{

    intaff = komanda.ExecuteNonQuery();MessageBox.Show(aff + " rows were affected.");

    }

    catch(Exceptionex){

    MessageBox.Show(ex.Message);

    }finally{

    konekcija.Close();

    }}

  • 7/25/2019 Pristup bazama podataka

    10/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Krenimo redom. Prvo se kreira objekat koji predstavlja konekciju na bazu podataka.

    To je klasa koja se naziva MySqlConnection koja prima kao parametar konekcioni

    string. Taj string sadri podatke o naoj bazi. Sljedei korak jeste kreiranje komande koja se treba izvriti. To se radi kreiranjem

    objetka tipa MySqlCommand. Ovdje nema parametara koji se prosljeuju. Pristupajui osobini CommandText klase MySqlCommandse postavlja tekst komande. Tu

    emo ubaciti tekst nae INSERT komande samo to emo umjesto nekihhardkodiranih podataka ubaciti podatke sa nae forme. Treba se obratiti panja da sviatributi budu u ispravnom formatu, a pogotovo datumi koji se unose kao 'YYYY-MM-

    DD' (Napomena:Ovo je generalno loe rijeenje jer na ovaj nain doputa sigurnosnipropust zvani SQL Injection(https://www.owasp.org/index.php/SQL_Injection), ali je

    zapotrebe ove vjebe i zadae 4 ovaj pristup sasvim dovoljan). U sljedee dvije linije se kreiranoj komandi dodijeli konekcija i ista se otvori. Sada

    smo konektovani i moemo izvravati naredbe. Poto je ovo dio u kome moe nastati izuzetak, stavljamo ga u try blok. Pozivamo

    funkciju ExecuteNonQuery koja izvrava nau komandu, a kao povratni parametarvraa broj redova koji su zahvaeni promjenom.

    Ako se desio neki izuzetak, prikaemo njegov tekst u catchbloku. Konano, nakon svega zatvorimo konekciju.

    Odzivi za Update i Delete tj. za auriranje i brisanje unijetih slogova su dosta sliniprethodnom kodu, samo se razlikuje tekst komande.

    Update:

    komanda.CommandText = "UPDATE mojabaza.studenti SET ime = '"+ tbIME.Text + "',prezime

    = '"+ tbPREZIME.Text + "', roden = '"+ Convert.ToString(dtpDATUM.Value.Year) + "-"+

    Convert.ToString(dtpDATUM.Value.Month) + "-" + Convert.ToString(dtpDATUM.Value.Day) +

    "', godina=" + Convert.ToString(nudGODINA.Value) + " WHERE id=" +

    Convert.ToString(nudID.Value) + ";";

    Delete:

    komanda.CommandText = "DELETE FROM mojabaza.studenti WHERE id=" +

    Convert.ToString(nudID.Value) + ";";

    Malo drugaija situacija je sa SELECT naredbom. Tu se u trybloku nalazi sljedei dio kda:

    komanda.CommandText = "SELECT * FROM mojabaza.studenti;";

    ...MySqlDataAdapteradp = newMySqlDataAdapter(komanda);DataSetds = newDataSet();

    adp.Fill(ds);dgvPRIKAZ.DataSource = ds.Tables[0].DefaultView;

    Bitno je napomenuti da ovdje nije koriten prikaz po nekom atributu, ve su pokupljeni svipdoaci iz baze. Da ostvarimo prikaz po prametrima, jednostavno kombinujemo upita sa nekim

    od podataka sa forme, recimo ID.to se tie kda u trybloku, on u biti nije nita drugo nekoizvrenje komande preko objekta klase MySqlDataAdapter i oblikovanje onoga to nam ta

    komanda vraa u nama pogodnu formu tj. objekat tipa DataSet. Nakon toga taj objekatpoveemo sa dataGridViewkontrolom koju se generalno koristi za prikaz podataka iz baze.

    https://www.owasp.org/index.php/SQL_Injectionhttps://www.owasp.org/index.php/SQL_Injectionhttps://www.owasp.org/index.php/SQL_Injectionhttps://www.owasp.org/index.php/SQL_Injection
  • 7/25/2019 Pristup bazama podataka

    11/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Zadaci za samostalan rad

    ZADATAK 1.

    Potrebno je nadograditi programsko rjeenje za zadatak 6 vjebe 9, tako da e se upisivati

    podaci o zaposlenicima u bazu podataka. Sve operacije nad zaposlenicima (brisanjezaposlenika, dodavanje zaposlenika, izmjena postojeeg zaposlenika, pretrage zaposlenika poodreenom kriteriju) e se obavljati nad podacima u bazi podataka. Takoe je potrebnodizajnirati ERD dijagram. Iz pomonog C# konzolnog rjeenja KreiranjeTabela kreiratiodgovarajue tabele u MySQL bazi podataka.

    ZADATAK 2.

    Na formi sa slike 1 (forma iz vjebe 9 zadatak 6) dodati dugmad: Dodaj Zaposlenika,Pregled Zaposlenika, Brisanje Zaposlenika, Promjena Podataka Zaposlenika, Lista Svih

    Zaposlenika,Pretraga Po Kriteriju.

    Slika 1Forma Zaposlenik

    Za dugmeDodaj Zaposlenikaprogramirati dogaaj klik koji e validirane podatkeo zaposleniku dodati u tabelu.

    Za dugmePregled Zaposlenikaprogramirati dogaaj klik kojim e se prikazati svi

    zaposlenici na formi ali jedan po jedan i to na istoj formi koja je koristila za unospodataka o zaposleniku. Omoguiti odgovarajuu navigaciju na sljedei i prethodnislog.

    Za dugme Brisanje Zaposlenikaprogramirati dogaaj klik kojim e se prikazivatizaposlenici na isti nain kao sa dogaajem Pregled Zaposlenika. Omoguitikorisniku kada pronae slog koji eli izbrisati, da se izvri brisanje sloga izosnovne tabele za zaposlenike. Izbrisani slog je potrebno prepisati u drugu tabelu i

    dodati datum i vrijeme brisanja sloga.

    Za dugme Promjena Podataka Zaposlenikaprogramirati dogaaj klik kojim e seprikazivati zaposlenici na isti nain kao sa dogaajem Pregled Zaposlenika.

  • 7/25/2019 Pristup bazama podataka

    12/12

    Razvoj Programskih Rjeenja

    Akademska godina 2015/2016

    Omoguiti korisniku kada pronae slog koji eli I promijeniti, da se izvripromjena sloga iz osnovne tabele za zaposlenike.

    Za dugme Lista Svih Zaposlenikaprogramirati dogaaj klik koji e omoguitiprikaz podataka o zaposlenicima na drugoj formi u DataGridView kontroli.

    Omoguiti navigaciju kroz podatke prikazane na DataGridview kontroli. Omoguitii da se preko DataGridView kontrole moe vriti promjena podataka ozaposlenicima.

    Za dugmePretraga Po Kriterijuprogramirati dogaaj klik koji e omoguiti da sekorisniku prikae lista koja e sadravati kriterije izbora koji odgovaraju atributimaklase zaposlenik (odnosno kolonama u tabeli zaposlenik). Kada korisnik odabere

    kriterij po kojem eli izvriti pretragu i unese odgovarajuu vrijednost izvritiodgovarajui prikaz o traenom zaposleniku ukoliko isti postoji.