Vezbe 08 - MySQL

You might also like

Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 12

VEBE 08 MySQL

RAD 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=valueY
DELETE 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=valueY
SELECT * FROM student WHERE prOcena > 8

Pretrage po slinosti LIKE, NOT LIKE


_ - zamenjuje jedan karakter
% - zamenjuje vie karaktera
SELECT * FROM student WHERE prezime LIKE '_o%';

Sortiranje selektovanih rezultata (ORDER BY DESC, ASC)


SELECT *
FROM tableName
WHERE col_nameX=valueX AND (OR)
col_nameY=valueY
ORDER 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 tableName

GROUP BY col_name;
SELECT min(prOcena) AS 'min', max(prOcena) AS 'max' FROM
student

Uspostavljanje konekcije sa MySQL bazom podataka


Obavezno 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:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

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)
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
<Resource name="jdbc/mysql" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/tutorial?
useUnicode=true&amp;characterEncoding=utf8&amp;"
username="root" password="" maxActive="20" maxIdle="10" maxWait="-1" />

</Context>

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 podataka

REENJE:
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;}
}

<%@ page language="java" contentType="text/html;


charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Unos</title>
</head>
<body>
<table>
<form name="myform" action="ServletStudent" method=post>
<tr height="25">
<td align="right" width="20%" bgcolor="#FFFF66">IME :</td>
<td><input type="text" name="ime" id="ime"></td>
</tr>
<tr height="25">
<td align="right" width="20%" bgcolor="#FFFF66">PREZIME :</td>
<td><input type="text" name="prezime" id="prezime"></td>
</tr>
<tr height="25">
<td align="right" width="20%" bgcolor="#FFFF66">PR.OCENA:</td>
<td><input type="text" name="prOcena" id="prOcena"></td>
</tr>
<tr height="25">
<td align="center" width="20%" colspan="2">
<input type="submit" name="akcija" value="UNOS"></td>
</tr>
</form>
<%
String msg = (String) request.getAttribute("msg");
if (msg!= null && msg.length()>0){
%>
<tr height="25">
<td colspan="2"><%= msg %></td>
</tr>
<%} %>
</table>
</body>
</html>

10

import
import
import
import
import
import
import
import
import
import
import

java.io.IOException;
java.sql.Connection;
java.sql.PreparedStatement;
java.sql.SQLException;
javax.naming.InitialContext;
javax.naming.NamingException;
javax.servlet.ServletException;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
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 parametara
String
String
String
String

ime = new String(request.getParameter("ime").getBytes("ISO-8859-1"), "UTF-8");


prezime = new String(request.getParameter("prezime").getBytes("ISO-8859-1"), "UTF-8");
prOc = new String(request.getParameter("prOcena").getBytes("ISO-8859-1"), "UTF-8");
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

11

// 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 odgovora
request.setAttribute("msg", msg);
request.getRequestDispatcher("unos.jsp").forward(request, response);
}
}

NAPOMENA: Prosleivanje atributa


SERVLET
request.setAttribute("msg", msg);

JSP
String msg = (String)
request.getAttribute("msg");

DALJI RAD: sledei as


Kreiranje 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 !!!

12

You might also like