You are on page 1of 8

VEBE 09 DATABASE ACCESS OBJECT (DAO)

ZADATAK:
M
Kreirati klasu Osoba opisanu sa atributima:

idosoba, ime, prezime, JMBG, vremeUpisa (Timestamp)

Dodati potrebne get i set metode kao i konstruktore.

Kreirati klasu OsobaDAO koja u konstruktoru podeava konekciju sa MySQL bazom podataka i kao
funkcionalnosti pri radu implementira sledee metode:

public
public
public
public

void insertOsoba(Osoba osoba)


void deleteOsoba(int idosoba)
Osoba getOsobaById(int idosoba)
ArrayList<Osoba> getLastNOsoba()

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");

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/IMEBAZE?
useUnicode=true&amp;characterEncoding=utf8&amp;"
username="root" password="" maxActive="20" maxIdle="10" maxWait="-1" />
</Context>

// vazni importi
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.util.ArrayList;
public class DAO {
private DataSource ds;
// DEFINICIJA KONEKCIONIH STRINGOVA
private static String SELECTOSOBA = "SELECT * FROM osoba WHERE ime = ?";
// DEFINICIJA KONSTRUKTORA ZA PODESAVNJE KONEKCIJE UVEK ISTO
public OsobaDAO(){
try {
InitialContext cxt = new InitialContext();
if ( cxt == null ) {
}
ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/mysql" );
if ( ds == null ) {
}
} catch (NamingException e) {
}
}
// DEFINICIJA METODE
public ArrayList<Osoba> selectOsobe(String ime){
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
// POMOCNE PROMENLJIVE ZA KONKRETNU METODU
ArrayList<Osoba> lo = new ArrayList<Osoba>();
Osoba osoba = null;
try {
con = ds.getConnection();
pstm = con.prepareStatement(SELECTOSOBA);
// DOPUNJAVANJE SQL STRINGA, SVAKI ? SE MORA PODESITI
pstm.setString(1, ime);
pstm.execute();
//****POCETAKAKO UPIT VRACA REZULTAT TREBA SLEDECI DEO
rs = pstm.getResultSet();
while(rs.next()){ // if AKO UPIT VRACA JEDAN REZULTAT
osoba = new Osoba();
osoba.setIdosoba(rs.getInt("idosoba"));
osoba.setIme(rs.getString("ime"));
osoba.setPrezime(rs.getString("prezime"));
osoba.setJMBG(rs.getString("JMBG"));
osoba.setVremeUpisa(rs.getTimestamp("vremeUpisa"));

//****KRAJ

lo.add(osoba);
}
KRAJ OBRADE ResultSet-a
} catch (SQLException e) {
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return lo;

}
// DEFINICIJA OSTALIH METODA ...
}

REENJE:
Preko phpMyAdmin-a kreirati bazu koja se zove ip09 sa Tabelom Osoba sa parametrima opisanim u klasi
Osoba. Na slici ispod prikazana struktura kreirane tabele u bazi.

Kreirati fajl context.xml u okviru WebContent/META-INF/context.xml sa sledeim sadrajem:


<?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/ip09?useUnicode=true&amp;characterEncoding=utf8&amp;"
username="root" password="" maxActive="20" maxIdle="10" maxWait="-1" />
</Context>

VANIJI DELOVI KODA


public class Osoba {
private int idosoba;
private String ime;
private String prezime;
private String JMBG;
private Timestamp vremeUpisa;
// GENERISANJE KONSTRUKTORA I GETSET METODA
public Osoba(String ime, String prezime, String JMBG){
this.ime = ime;
this.prezime = prezime;
this.JMBG = JMBG; //proveriti JMBG duzinu i format
}
public Osoba(){
ime = "";
prezime = "";
JMBG = "";
}
public Timestamp getVremeUpisa() {
return vremeUpisa;
}
public void setVremeUpisa(Timestamp vremeUpisa) {
this.vremeUpisa = vremeUpisa;
}
public int getIdosoba() {
return idosoba;

}
public void setIdosoba(int idosoba) {
this.idosoba = idosoba;
}
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 String getJMBG() {
return JMBG;
}
public void setJMBG(String jmbg) {
JMBG = jmbg;
}

import
import
import
import
import
import
import

java.sql.Connection;
java.sql.PreparedStatement;
java.sql.ResultSet;
java.sql.SQLException;
javax.naming.InitialContext;
javax.naming.NamingException;
javax.sql.DataSource;

import java.util.ArrayList;
public class OsobaDAO {
// DEFINICIJA KONEKCIONIH STRINGOVA
private static String INSERTOSOBA = "INSERT INTO osoba (ime, prezime, JMBG,
vremeUpisa) VALUES (?, ?, ?, CURRENT_TIMESTAMP)";
private static String DELETEOSOBA = "DELETE from osoba WHERE ime=?";
private static String GETOSOBABYID = "SELECT * FROM osoba WHERE idosoba=? ";
private static String GETLASTNOSOBA = "SELECT * FROM osoba ORDER BY idosoba
DESC LIMIT ? ";
private DataSource ds;
// DEFINICIJA KONSTRUKTORA ZA PODESAVNJE KONEKCIJU
public OsobaDAO(){
try {
InitialContext cxt = new InitialContext();
if ( cxt == null ) {
}
ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/mysql" );
if ( ds == null ) {
}
} catch (NamingException e) {
}
}
// DEFINICIJA METODE ZA UNOS OSOBE U BAZU
public void insertOsoba(Osoba osoba){
Connection con = null;
PreparedStatement pstm = null;

try {
con = ds.getConnection();
pstm = con.prepareStatement(INSERTOSOBA);
pstm.setString(1, osoba.getIme());
pstm.setString(2, osoba.getPrezime());
pstm.setString(3, osoba.getJMBG());
pstm.execute();
} catch (SQLException e) {
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}

}
// DEFINICIJA METODE ZA BRISANJE SVIH OSOBA IZ BAZE SA PROSLEDJENIM IMENOM
public void deleteOsoba(String ime){
Connection con = null;
PreparedStatement pstm = null;
try {
con = ds.getConnection();
pstm = con.prepareStatement(DELETEOSOBA);
pstm.setString(1, ime);
pstm.execute();
} catch (SQLException e) {
e.printStackTrace();
}
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// DEFINICIJA METODE OSOBU IZ BAZE PO NJENOM ID-U IZ BAZE
public Osoba getOsobaById(int idosoba){
Osoba osoba = null;
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try {

con = ds.getConnection();
pstm = con.prepareStatement(GETOSOBABYID);
pstm.setInt(1, idosoba);
pstm.execute();
rs = pstm.getResultSet();
if(rs.next()){
osoba = new Osoba();
osoba.setIdosoba(rs.getInt("idosoba"));
osoba.setIme(rs.getString("ime"));
osoba.setPrezime(rs.getString("prezime"));
osoba.setJMBG(rs.getString("JMBG"));
osoba.setVremeUpisa(rs.getTimestamp("vremeUpisa"));

}
} catch (SQLException e) {
e.printStackTrace();
}
finally{
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return osoba;
}
// DEFINICIJA METODE KOJA VRACA LISTU ZADNJIH 10 OSOBA IZ BAZE
public ArrayList<Osoba> getLastNOsoba(int limit){
Osoba osoba = null;
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
ArrayList<Osoba> lo = new ArrayList<Osoba>();
try {

con = ds.getConnection();
pstm = con.prepareStatement(GETLASTNOSOBA);
// DOPUNJAVANJE SQL STRINGA, SVAKI ? SE MORA PODESITI
pstm.setInt(1, limit);
pstm.execute();
rs = pstm.getResultSet();
while(rs.next()){
osoba = new Osoba();
osoba.setIdosoba(rs.getInt("idosoba"));
osoba.setIme(rs.getString("ime"));
osoba.setPrezime(rs.getString("prezime"));
osoba.setJMBG(rs.getString("JMBG"));
osoba.setVremeUpisa(rs.getTimestamp("vremeUpisa"));

lo.add(osoba);
}
} catch (SQLException e) {
e.printStackTrace();
}
finally{
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return lo;
}

}
// testiranje: insertTest.jsp,
<%
// kreiranje konekcije
OsobaDAO od = new OsobaDAO();
Osoba o = new Osoba("Pera", "Peric", "1111111111111");
// poziv metode

od.insertOsoba(o);
// proveriti u bazi da li je dodata osoba
%>
// testiranje: deleteTest.jsp,
<%
// kreiranje konekcije
OsobaDAO od = new OsobaDAO();
// poziv metode
od.deleteOsoba(5);
// proveriti u bazi da li je obrisana osoba sa id 5
%>
// testiranje: selectByIdTest.jsp,
<%
Osoba o = null;
OsobaDAO od = new OsobaDAO();
o = od.getOsobaById(1111);
if (o!= null){
%>

Podaci o osbi su:<br>


ime: <%=o.getIme()%><br>
prezime: <%=o.getPrezime()%><br>
JMBG: <%=o.getJMBG()%><br>
Vreme: <%=o.getVremeUpisa()%><br>
<%
} else {%>
NEMA OSOBE !!!
<%
} %>
// testiranje: selectLastNTest.jsp,
<%
ArrayList<Osoba> lo = null;
OsobaDAO od = new OsobaDAO();
lo = od.getLastNOsoba(6);
if (lo != null && lo.size()>0){
%>

<table border="1">
<tr>
<th>ID</th>
<th>IME</th>
<th>PREZIME</th>
<th>JMBG</th>
<th>VREME</th>
</tr>
<%for (Osoba pom : lo){%>
<tr>
<td><%=pom.getIdosoba() %></td>
<td><%=pom.getIme() %></td>
<td><%=pom.getPrezime() %></td>
<td><%=pom.getJMBG() %></td>
<td><%=pom.getVremeUpisa() %></td>
</tr>
<%} %>
</table>

<%} else{%>
NEMA OSOBA !!!
<%} %>

You might also like