You are on page 1of 6

ResultSet

ResultSet je klasa koja omoguava prihvat dijela podataka iz baze podataka koji su rezultat upita.
Prve verzije JDBC-a je omoguavala samo sekvencijalno itanje podataka iz uitanog skupa podataka.
Nove verzije JDBC-a omoguava vie naina itanja kao i auriranje podataka direktno u resultSet-u.
Da bi se kreirao resultSet potrebno je da se prvo kreira objekat klase Statement. Ako se eli napredni
rad sa resulSet-om tada se prilikom kreiranja objekta klase Statement moraju definisati osobine tog
objekta. Mogue osobine su:

Nain pretraivanja
o TYPE_FORWARD_ONLY itanje podataka se vri samo od poetka premu kraju; u
resultSet-u se vide samo podaci koji postoje u momentu izvrenja upita
o TYPE_SCROLL_INSENSITIVE omoguava itanje podataka naprijed, nazad, sa
preskocima; u resulSet-u se vide podaci u momentu izvrenja upita
o TYPE_SCROLL_SENSITIVE - omoguava itanje podataka naprijed, nazad, sa preskocima; u
resultSet-u se vide trenutni podaci iz baze podataka (promjene u bazi se reflektuju na
podatke u resultSet-u
Azuriranje resultSet-a
o CONCUR_READ_ONLY - podaci se mogu samo itati
o CONCUR_UPDATABLE - podaci se mogu aurirati u resultSet-u
Postojanost resultSet-a
o HOLD_CURSORS_OVER_COMMIT - resultSet opstaje i nakon commit-a
o CLOSE_CURSORS_AT_COMMIT - resulSet se zatvara sa commit-om

Metoda createResultSetStatement

Primjer instanciranja klase Statement sa osobinama resultSet-a:


- TYPE_SCROLL_INSENSITIVE (moe se pretaivati u svim smjerovima),
- CONCUR_UPDATABLE (podaci se mogu aurirati) i
- HOLD_ CURSORS_OVER_COMMIT (nakon commit-a se resultSet zadrava otvoren) se vide u metodi
createResultSetStatement

public Statement createResultSetStatement(Connection konekcija) {


try {
iskaz = konekcija.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE,
ResultSet.HOLD_CURSORS_OVER_COMMIT);
} catch (SQLException e) {
e.printStackTrace();
}
return iskaz;
}

Normalno prilikom rada se mora voditi rauna da rad sa resultSet-om definisanim na ovaj nain vie
optereuje rad sistema za upravljanje bazom podataka. Iz tih razloga se mora voditi rauna kakav se
oblik resultSet-a koristi.

Metoda createResultSet

Kreiranje resultSet-a sa naprijed navedenim karakteristikama moe se uraditi na nain kako je to


prikazano u metodi createResultSet.
public ResultSet createResultSet(Connection kon) {
Statement naredba = createResultSetStatement(kon);
String sql = "SELECT korisnik_id, ime, prezime FROM Korisnik" + " ORDER BY korisnik_id";
ResultSet rs = null;
try {
rs = naredba.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

Metoda prikaziRed

Prilikom testiranja metoda za pretraivanje prikazuju se podaci iz tekueg reda resulSet-a. To


prikazivanje se radi u metodi prikaziRed.

public void prikaziRed(ResultSet rs) {


try {
String ime = rs.getString("ime");
String prezime = rs.getString("prezime");
System.out.println(ime + " " + prezime);
} catch (SQLException e) {
System.out.println("Greska");
}
}

Metoda itanja redova

Postoji vie naina itanja redova iz resultSet-a. itanje se radi sa metodama klase ResultSet. Te
metode su:

next() pomjera kursor naprijed jedan red. Vraa true ako postoje podaci u tom redu, a ako ne
vraa false.
previous() pomjera kursor nazad jedan red. Vraa true ako postoji taj red, u protivnom vraa false.
first() postavlja kursor na prvi red u ResultSet-u. Vraa true ako prvi red postoji, u protivnom vraa
false.
last() postavlja kursor na zadnji red u ResultSet-u. Vraa true ako on postoji, u protivnom vraa false.
beforeFirst() pozicionira kursor ispred prvog reda. Ako resultSet nema redova ova metoda
nema efekta.
afterLast() postavlja kursor nakon zadnjeg reda u resultSet-u. Ako resultSet nema podataka
metoda nema efekta.
relative(int brojRedova) pomjera kursor relativno u odnosu na tekui red za vrijednost
parametra brojRedova. Ako je brojRedova nula kursor se ne pomjera. Ako je pozitivan broj kursor
se pomjera naprijed brojRedova redova, a ako je negativan pomjeranje se vri unazad. U sluaju
da nema toliko redova za koliko se treba pomjeriti kursor, kursor se pozicionira iza zadnjeg
odnosno prije prvog reda. Metoda vraa true ako red postoji, u protivnom vraa false. Ako je brojRedova
1 tada je ova metoda ista kao metoda next().
absolute(int brojReda) postavi kursor na red definisan sa vrijedosit brojReda od poetka ako je
brojReda pozitivan ili od kraja ako je brojReda negativan. U sluaju da u resultSet-u nema toliko
redova kursor se pozicionira poslije zadnjeg, odnosno prije prvog reda.

Normalno koritenje ovih metoda zavisi i od tipa objekta klase Statemet odnosno vrste dozvoljenih
pretraivanja.

Metoda printN

Metoda printN koristi metodu abslute() da pozicinira kursor na n-tu poziciju resultSet-a.

public void printN(ResultSet rs, int n) {


try {
boolean b = rs.absolute(n);
if (b)
prikaziRed(rs);
else
System.out.println("Nema reda - "+ n);
} catch (SQLException e) {
System.out.println("Greska");
}
}

Metoda printNext

Metoda printNext koristi metodu next() da pozicinira kursor na slijedeu poziciju resultSet-a.

public void printNext(ResultSet rs) {


try {
boolean b = rs.next();
if (b)
prikaziRed(rs);
else
System.out.println("Nema slijedeceg");
} catch (SQLException e) {
System.out.println("Greska");
}
}

Metoda printNext sa dva parametra koristi metodu relativ() za pozicinira kursor na poziciju resultSet-
a koja je za n udaljena od tekue pozicije.

public void printNext(ResultSet rs, int i) {


try {
boolean b = rs.relative(i);
if (b)
prikaziRed(rs);
else
System.out.println("Nema slijedeceg");
} catch (SQLException e) {
System.out.println("Greska");
}
}

Metoda printPrior

Metoda printPrior koristi metodu privios() da pozicinira kursor na prethodni red u resultSet-a.

public void printPrior(ResultSet rs) {


try {
boolean b = rs.previous();
if (b)
prikaziRed(rs);
else
System.out.println("Nema prethodnog");
} catch (SQLException e) {
System.out.println("Greska");
}
}

Metoda printPrior sa dva parametra koristi metodu relative za pomjeranje kursora za eljeni broja
redova unaprijed.

public void printPrior(ResultSet rs, int i) {


try {
boolean b = rs.relative(-i);
if (b)
prikaziRed(rs);
else
System.out.println("Nema slijedeceg");
} catch (SQLException e) {
System.out.println("Greska");
}
}

Metoda auriranja

Podaci u resultSet-u se mogu aurirati odnosno mogu se upisivati novi redovi, mijenjati i brisati
postojei. Normalno, da bi se ovo moglo raditi osobina naredbe sa kojom je kreiran kursor mora biti
CONCUR_UPDATABLE.

Metoda insertRow

Metoda insertRow upisuje red u resultSet odnosno upisuje red u tabelu baze podataka.

public void insertRow(ResultSet rs, int sifra, String ime, String prezime) {
try {
rs.moveToInsertRow();
rs.updateInt("korisnik_id", sifra);
rs.updateString("ime", ime);
rs.updateString("prezime", prezime);
rs.insertRow();
rs.moveToCurrentRow();
} catch (SQLException e) {
System.out.println("Greska insert reda..." + e.getMessage());
}
}

Za realizacuju metode insertRow koritene su metode klase ResulSet i to:

moveToInsertRow() postavlja kursor na prazan nov slog koji e se upisati u resultSet odnosno
tabelu u bazi podataka.
updateInt(nazivPolja, vrijednostPolja) aurira dato polje tekueg sloga u resultSet-u. Ovo polje
je tipa intger. Svaki tip podataka ima svoju odgovarajuu metodu.
updateString(nazivPolja, vrijednostPolja) aurira dato polje tekueg sloga u resultSet-u. Ovo
polje je tipa String.
insertRow() tekui pripremljeni slog upisuje u resultSet odnosno tabelu baze podataka
moveToCurruntRow() postavlja kursor na tekui (u ovom sluaju upisani) red

Metoda updateRow

Metoda updateRow mijenja red u resultSet odnosno aurira red u tabeli baze podataka.

public void updateRow(ResultSet rs, String ime) {


try {
rs.moveToCurrentRow();
rs.updateString("ime", ime);
rs.updateRow();
} catch (SQLException e) {
System.out.println("Greska update..." + e.getMessage());
}
}

U realizaciji ove metode koritene su metode klase ResultSet. Ovdje su prvi put koritene metode:

updateRow() aurira tekui red

Metoda deleteRow

Metoda deleteRow brie red u resultSet odnosno brie red u tabeli baze podataka.

public void deleteRow(ResultSet rs) {


try {
rs.moveToCurrentRow();
rs.deleteRow();
} catch (SQLException e) {
System.out.println("Greska delete..."+e.getMessage());
}
}

U realizaciji ove metode koritene su metode klase ResultSet. Ovdje je prvi put koritena metoda:

deleteRow() brie tekui red


Metoda main

U metodi main() napisan je program koji koristi gore opisane metode.

public static void main(String[] args) {


V6ResultSet db = new V6ResultSet();
try {
db.open(urlTest2);
konekcija = db.getConnection();

db.createStatement();
db.setAutoCommit(false);

db.stampajKorisnike("lista korisnika na pocetku","");


ResultSet rs = db.createResultSet(konekcija);

db.printN(rs, 2);
db.printNext(rs);

db.insertRow(rs, 19, "Ime19", "Prezime19");


db.commit(konekcija);

db.printN(rs,4);

db.updateRow(rs, "NovoIme");
db.commit(konekcija);

db.printPrior(rs);
db.printN(rs, 5);
db.printPrior(rs, 2);
db.deleteRow(rs);

db.printN(rs, 20);
db.commit(konekcija);
db.stampajKorisnike("Sadraj na kraju rada", "");
rs.close;

db.closeConnection();
} catch (Exception e) {
e.printStackTrace();
}
}

You might also like