[ SteleStudent @ 21.08.2008. 10:28 ] @
Dakle imam server klijent aplikaciju u kojoj koristim bazu. E sad imam dve tabele u bazi od kojih je jedna zapisnik a druga stavka zapisnika - tj. u pitanju su slab i jak objekat :D. E sad prilikom ubacivanja zapisnika ubaciju se i 0, 1 ili vise stavki u bazu. Posto koristi autoincrement u bazi za ID zapisnika prilikom transakcije unosa zapisnika ne znam ID a treba mi jer taj podatak moram da ubacim u svaku od stavki u istoj toj transakciji. Kako da saznam koji ID zapisnika je zadao prilikom iste te transakcije DBMS? Koristim j-connector driver za mysql bazu. Konkretno koristim EasyPHP MySql bazu.
Poz i unapred hvala.
[ grizzly @ 25.08.2008. 14:15 ] @
Mislim da imas neku definisanu funkciju koja ce ti reci koji ce broj biti dodeljen sledecem redu. Cini mi se da sam nesto slicno video citajuci dokumentaciju za hSQLdb pa verovatno ima i tu...
[ LightBow @ 25.08.2008. 21:28 ] @
Jedan od nacina je da pre nego sto uneses zapisnik, prvo selectujes sve redove iz tabele i prebrojis koliko ih ima, npr u while petlji za ResultSet ubacis counter. Kada zavrsi petlja, taj counter povecas za jedan i to ti je ID sledeceg (novog) zapisnika.
Ovako sam ja radio ali verujem da to nije najelegantnije resenje
[ grizzly @ 25.08.2008. 22:42 ] @
Tu elegantnosti nema ni u tragovima :)

Posebno sto ako se obrise neki slog...
[ Tulex @ 26.08.2008. 08:19 ] @
Najelegantnije resenje bi bilo kao sto je @grizzly predlozio, da sql to ucini za tebe.
Manje elegantan nacin je da pre unosa trazis MAX id i onda taj broj povecas za jedan,
posto se autoincrement ne vraca da popuni neka id mesta koja si ti naknadno obrisao vec samo neki svoj counter povecava za 1.
Znaci trazenje max id i povecavanje za jedan je identicno autoincrement-u.
[ dragon.mi @ 02.09.2008. 07:43 ] @
Probaj na ovaj nacin:

session.save(zapisnik);
session.flush(); // Namece da se izvrsi insert naredba nad bazom i da se ubaci zapisnik
session.refresh(zapisnik); // Ponovo se ucitava prethodno uneti zapisnik pomocu jedne select naredbe
System.out.println( zapisnik.getZapisnikId() ); // Ovde bi trebao da je dostupan id zapisnika

// sada mozes da dodajes stavke zapisnika
[ vesokov @ 06.09.2008. 11:55 ] @

U Oracle-u je to jednostavno izvesti. Rezervises sekvencu za rekord koji ces da insertujes i sacuvas informaciju o njoj da bi mogao da je insertujes
u neku drugu tabelu, tako da uvijek imas konzistentne podatke.
Medjutim u MySQL-u nemas sekvence tako da moras programski da rjesavas.
Postoji funkciju koja vraca id posljednjeg insertovanog rekorda i zove se last_insert_id().
I onda moze da zavrsi posao. Ali ako radis u visekonkurentnom okruzenju, moraces da
programski rijesis nesinhronizovano insertovanje u tabelu.
Druga mogucnost jeste da simuliras sekvence u MySQL-u
kao sto je objasnjeno ovdje:
Code:
http://forge.mysql.com/tools/tool.php?id=7