vezbe 08 - mysql

15
VEŽBE 08 – MySQL RAD SA MYSQL BAZOM PODATAKA Postoji više alata za rad sa MySQL bazama podataka a najkorišćeniji je phpMyAdmin koji se dobija u okviru XAMPP paketa koji u sebi sadrži MySQL bazu podataka i phpMyAdmin alat za rad sa bazama podataka. Sa sledeće adrese skinuti instalaciju XAMPP paketa i instalirati je: http://www.apachefriends.org/en/xampp-windows.html Ostaviti username “root” bez password-a Pokrenuti ga preko start many ili desktop ikonice nakon čega se startuje u donjem desnom uglu ekrana (Sl. 1) klikom na Start za Apache I MySQL dobijamo zelenom bojom da pise Running klikom na Admin dugme od Apacha ili odlaskom na (http://localhost/xampp/ ) dobijamo administrativni panel (Sl. 2). Klikom na phpMyAdmin dobija se administrativni deo za rad sa bazama podataka (Sl. 3) 1

Upload: serbiaduke

Post on 09-Nov-2015

306 views

Category:

Documents


5 download

DESCRIPTION

Java internet programiranje

TRANSCRIPT

VEBE 08 MySQLRAD SA MYSQL BAZOM PODATAKA

Postoji vie alata za rad sa MySQL bazama podataka a najkorieniji je phpMyAdmin koji se dobija u okviru XAMPP paketa koji u sebi sadri MySQL bazu podataka i phpMyAdmin alat za rad sa bazama podataka.

Sa sledee adrese skinuti instalaciju XAMPP paketa i instalirati je:http://www.apachefriends.org/en/xampp-windows.html Ostaviti username root bez password-a

Pokrenuti ga preko start many ili desktop ikonice nakon ega se startuje u donjem desnom uglu ekrana (Sl. 1) klikom na Start za Apache I MySQL dobijamo zelenom bojom da pise Running

klikom na Admin dugme od Apacha ili odlaskom na (http://localhost/xampp/) dobijamo administrativni panel (Sl. 2). Klikom na phpMyAdmin dobija se administrativni deo za rad sa bazama podataka (Sl. 3)

Slika 1. Pokretanje XAMMP-a

Slika 2. XAMPP administrativni panel

Slika 3. phpMyAdmin administrativni deo za rad sa MySQL bazom podataka

(na Sl. 3 je verzija 2.11.9.2 a najnovija je 3.5.2.2)

Nova baza se kreira u delu Create new database a za primer uneti naziv tutorial i odabrati colattion da bude UTF-8 unicode_ci nakon ega se kreira baza tutorial. Ovo ime je veoma vano jer se preko njega vri konekcija iz Java koda.

Nakon toga kreirati tabelu osoba sa atributima kao na slici:

Atribut idOsoba koji je primarni klju podesiti da bude auto_increment da bi bio jedinstven u bazi (mi ga ne unosimo prilikom izvravanja koda ve se on dodeljuje po unosu ostalih polja)Vanije Kartice administrativnog panela:

Browse: daje na uvid unete podatke u bazu podataka za odabranu tabelu

Structure: (prikazana na slici) daje opis strukture svakog polja tabele

SQL: deo za pisanje SQL koda nad kreiranom bazom podataka sa automatskim izvrenjem naredbi (ovde testirati komandu pre korienja u kodu)

Insert: daje mogunost runog unosa podataka za odabranu tabelu

Export/Import: izvoz i uvoz kompletnih baza podataka sa sve podacima u vidu tekstualnog SQL fajla (odlino za backup i prenos baza sa raunara na raunar)

Empty: prazni tabelu

Drop: brie tabelu

SQL

Sa MySQL bazom podataka se upravlja pomou definisanih SQL komandi i osnovne funkcionalnosti se postiu sledeim komandama:

Kreiranje baze i tabela:

CREATE DATABASE database_name;CREATE TABLE CUSTOMER

(CUSTOMER_ID INTEGER NOT NULL PRIMARY KEY,

FIRST_NAME VARCHAR(20) NOT NULL,

LAST_NAME VARCHAR(30) NOT NULL,

STREET VARCHAR(50));

Brisanje baze i tabela:

DROP DATABASE database_name; DROP TABLE table_name; Dodavanje vrednosti u tabelu:

INSERT INTO table_name (col_name1, col_name2, ...) VALUES (value1, value2, ...); INSERT INTO student (ime, prezime, prOcena)VALUES ('Pera', 'Peric', 5.0)

Modifikovanje sadraja kolona:

UPDATE table_name SET col_name1=value1 , col_name1=value1

WHERE col_nameX=valueX AND (OR) col_nameY=valueY UPDATE student SET prOcena='6' WHERE ime='Pera'

Brisanje redova iz tabele:

DELETE FROM table_name WHERE col_nameX=valueX AND (OR) col_nameY=valueYDELETE FROM student WHERE ime = 'Pera'

Pretraga i selektovanje odreenih redova iz baze:

SELECT columnName1, columnName2,.. FROM tableName; (* za selektovanje svih kolona)

SELECT * FROM tableName

WHERE col_nameX=valueX AND (OR) col_nameY=valueYSELECT * FROM student WHERE prOcena > 8

Pretrage po slinosti LIKE, NOT LIKE _ - zamenjuje jedan karakter

% - zamenjuje vie karakteraSELECT * FROM student WHERE prezime LIKE '_o%';

Sortiranje selektovanih rezultata (ORDER BY DESC, ASC) SELECT *FROM tableNameWHERE col_nameX=valueX AND (OR) col_nameY=valueYORDER BY col_name DESC; SELECT * FROM student WHERE prOcena > 6 ORDER BY prOcena DESC

Ugraene matematike funkcije (AVG, SUM, MIN, MAX, COUNT, STDEV) SELECT avg(col_name) AS 'AVERAGE ', min(col_name) AS 'LOWEST 'FROM tableNameGROUP BY col_name; SELECT min(prOcena) AS 'min', max(prOcena) AS 'max' FROM student

Uspostavljanje konekcije sa MySQL bazom podatakaObavezno kopirati mysql-connector-java-5.1.6-bin.jar na sledee lokacije:

TOMCAT:

C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\

JDK

C:\Program Files\Java\jdk1.6.0_06\jre\lib\

PODESAVANJE KONEKCIJE KA MYSQL BAZI SA UTF-8 PODRSKOM

1. na svakoj jsp strani na kojoj se zeli ispis nasis slova podesiti ovo:

2. u servletu podatke kupiti ovako:String ime = new String(request.getParameter("ime").getBytes("ISO-8859-1"), "UTF-8");

3. u bazi je encoding: utf8_unicode_ci 4. u okviru WebContent/META-INF/context.xml fajla mysql connection url string treba da izgleda ovako:jdbc:mysql://localhost:3306/ime_baze?useUnicode=true&characterEncoding=utf8&charactetrResultSets=utf8

ili sve ukupno (ako ne postoji kreirati ga i kopirati sledei sadraj unutra)

ZADATAK: Kreirati bazu podataka pod imenom ip07 sa tabelom student (ime, prezime, prOcena) pomou grafikog vizarda phpMyAdmin-a ili pomou SQL komande Kreirati identinu klasu Student.java u src folderu

Podesiti konekcioni string za bazu ip07 (WebContent/META-INF/context.xml)

Kreirati unos.jsp sa formom za unos neophodnih parametara sloenih u tabelu Kreirati ServletStudent u kojem e se u okviru post metode prosleeni parametri sa forme uneti u bazu podatakaREENJE:CREATE TABLE student

(id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

ime VARCHAR(20) NOT NULL,

prezime VARCHAR(30) NOT NULL,

prOcena FLOAT NOT NULL)

public class Student {

private int id;

private String ime;

private String prezime;

private float prOcena;

public Student(String ime, String prezime, float prOcena) {

super();

this.ime = ime;

this.prOcena = prOcena;

this.prezime = prezime;

}

public int getId() {return id;}

public void setId(int id) {this.id = id;}

public String getIme() {return ime;}

public void setIme(String ime) {this.ime = ime;}

public String getPrezime() {return prezime;}

public void setPrezime(String prezime) {this.prezime = prezime;}

public float getPrOcena() {return prOcena;}

public void setPrOcena(float prOcena) {this.prOcena = prOcena;}

}

Unos

IME :

PREZIME :

PR.OCENA:

0){

%>

import java.io.IOException;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.sql.DataSource;public class ServletStudent extends HttpServlet {

private static final long serialVersionUID = 1L;

private DataSource ds;

private static String INSERTSTUDENT = "INSERT INTO student (ime, prezime, prOcena) VALUES (?, ?, ?)";

protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//prikupljanje parametaraString ime = new String(request.getParameter("ime").getBytes("ISO-8859-1"), "UTF-8");String prezime = new String(request.getParameter("prezime").getBytes("ISO-8859-1"), "UTF-8");String prOc = new String(request.getParameter("prOcena").getBytes("ISO-8859-1"), "UTF-8");String akcija = new String(request.getParameter("akcija").getBytes("ISO-8859-1"), "UTF-8");String msg = "";//obavezna provera prosledjenih parametara (zbog NULL Exception)if ( ime != null && ime.length()>0 && prezime != null && prezime.length()>0 && prOc != null && prOc.length()>0 && akcija != null && akcija.length()>0){ try {

Float prOcena = Float.parseFloat(prOc);

//obrada zahteva ako su svi parametri dobro prosledjeni

if(akcija.equals("UNOS")){

Student student = new Student(ime, prezime, prOcena);// podesavanje konekcije

try {

InitialContext cxt = new InitialContext();

if ( cxt == null ) {

}

ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/mysql" );

if ( ds == null ) {

}

} catch (NamingException e) {

}// KRAJ : podesavanja konekcije

// SQL unos Studenta (INSERTSTUDENT)

Connection con = null;

PreparedStatement pstm = null;

try {

con = ds.getConnection();

pstm = con.prepareStatement(INSERTSTUDENT); // kompletira se sql upit

pstm.setString(1, student.getIme());

pstm.setString(2, student.getPrezime());

pstm.setFloat(3, student.getPrOcena());

pstm.execute();

} catch (SQLException e) {

e.printStackTrace();

} // zatvaranje konekcije try {

con.close();

} catch (SQLException e) {

e.printStackTrace();

}// KRAJ : SQL unos Studenta (INSERTSTUDENT)

// odgovor posle obradjenih parametara

msg = "Uspesan unos !!!";

}

} catch (Exception e) {

// prosecna ocena nije broj

msg = "Prosecna ocena nije dobrog formata !!!";

}}else{

// odgovor ako nisu prosledjeni dobro parametri

msg = "Morate popuniti sva polja !!!";}// prosledjivanje odgovorarequest.setAttribute("msg", msg);request.getRequestDispatcher("unos.jsp").forward(request, response);}}

NAPOMENA: Prosleivanje atributa

SERVLETJSP

request.setAttribute("msg", msg);String msg = (String) request.getAttribute("msg");

DALJI RAD: sledei asKreiranje posebne DAO klase u kojoj e se podesiti konekcija i definisati sve metode potrebne za rad sa jednom tabelom u bazi a onda se u Servlet-u poziva samo eljena metoda sa prosleenim parametrima.

Ovakav kod je onda veoma pregledan i lak za upotrebu !!!1