Transakcije

Transakcije

Transakcije so mehanizem za skupinske operacije v tem smislu, da uspejo vse ali pa nobena. To prepreči nekonsistenčne probleme v podatkovni bazi, ki bi nastali, če bi se uspešno izvedel le del operacij. Pomislimo na primer, da bi želeli prestaviti del denarja iz enega računa na drugi in da bi dvig denarja uspel, polog na drugi račun pa ne. Žalostno, kaj ne?  Če to izvedemo kot transakcijo, je prva operacija (dvig) veljavna le, če tudi drugi del (polog) uspe.

Ko smo dobili povezavo »Connection« je lastnost AutoCommit nastavljena na  true. To pomeni, da je vsaka izvedba povpraševanja zapomnjena takoj po svoji izvedbi in preden začnemo izvajati naslednje povpraševanje. Če želimo združevati operacije v transakcije, moramo lastnost AutoCommit izključiti:

con.setAutoCommit(false) ;

Sedaj moramo dobiti nov objekt Statement (stari ne bo več deloval) in ga uporabljamo na že znani način. Ko zaključimo v se želene operacije, zahtevamo, pnjihovo pomnenje z naslednjim ukazom:

con.commit() ;

Nato nadaljujemo s skupino operacij, ki predstavljajo naslednjo transakcijo, ali pa preidemo na običajno, sprotno izvajanje operacij z ukazom:

con.setAutoCommit(true) ;

Če pride med izvajanjem transakcije do težav (recimo, da nismo mogli izvesti vseh operacij transakcije), lahko vse dotedanje operacije razveljavimo z ukazom:


con.rollBack() ;

Če pride do izpada podatkovne baze ali celo računalnika se bo v bistvu operacija »rollBack« izvedla samodejno pri ponovnem zagonu podatkovne baze.

Čas izvajanja posameznih transakcij moramo minimizirati, saj transakcije zadržujejo veliko virov in v bistvu zaklepajo podatkovno bazo. In tako onemogočajo druge transakcije.

Pri deli s transakcijami moramo biti previdni in rokovati s takoimenovanimi izjemami (exception handling). .Zato moramo transakcije vgraditi v oddelek try, ki ga v javanskih programih dobro poznamo. V primeru neuspešne transakcije izvedemo klic rollback.