Java rad sa bazom podataka(SQLite)

Java rad sa bazom podataka(SQLite)

offline
  • Pridružio: 22 Maj 2016
  • Poruke: 4

Zdravo svima.
Potrebna mi je pomoc oko zadatka.Zadatak glasi:
- Postoji metoda kreiraj autora koja može da kreira autora ukoliko već ne postoji autor u bazi podataka.

resenje zadatka:

public static boolean kreirajAutora(String imePrezime,int godinaRodjenja,int godinaSmrti){         if(vratiAutora(imePrezime)!=null) {             System.out.println("Dati autor vec postoji u bazi!");             return false;         }         else {             String sql = "INSERT INTO autori(autor,godinaRodjenja,godinaSmrti)" +                     " VALUES('" + imePrezime + "'," + godinaRodjenja + "," + godinaSmrti + ")";             BazaPodataka bp = BazaPodataka.getInstanca();             try{                 int i = bp.iudQuerry(sql);                 if(i==1) {                     System.out.println("Uspesno dodat autor");                     return true;                 }else {                     System.out.println("Niste dodali autora!");                     return false;                 }             }catch (SQLException e){                 System.out.println("Doslo je do greske pri dodavanju autora u bazu! "+e);                 return false;             }         }     } Povezivanje sa bazom podataka(konekcija): package konekcija; import java.sql.*; public class BazaPodataka {     private Connection conn;     private static BazaPodataka instanca;     private BazaPodataka() {         try {             Class.forName("org.sqlite.JDBC");             conn = DriverManager.getConnection("jdbc:sqlite:knjige.db");         } catch ( Exception e ) {             System.err.println("Doslo je do greske pri konekciji na bazu podataka" + e.getClass().getName() + ": " + e.getMessage() );             System.exit(0);         }     }     public static BazaPodataka getInstanca() {         if(instanca == null)             instanca = new BazaPodataka();             return instanca;     }     public void automatskaTransakcija(boolean on_off) throws SQLException { conn.setAutoCommit(on_off); }     public void snimiTransakciju() throws SQLException { conn.commit(); }     //metoda za upite koji su tipa INSERT, UPDATE, DELETE     public int iudQuerry(String sql) throws SQLException {         System.out.println(sql);         Statement statement = conn.createStatement();         return statement.executeUpdate(sql);     }     public ResultSet select(String sql) throws SQLException {         System.out.println(sql);         Statement statement= conn.createStatement();         return statement.executeQuery(sql);     } }
izgled baze:

[img]http://postimg.org/image/4c50hczqp/[/img]
Ako moze neko da mi objasni kod resenja bio bih mu zahvalan.Kod konekcije nije potrebno objasnjavati.Unapred zahvalan!



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

Šta tačno nije jasno ovde?



offline
  • Pridružio: 22 Maj 2016
  • Poruke: 4

ovi delovi:

if(vratiAutora(imePrezime)!=null) i try{ int i = bp.iudQuerry(sql); if(i==1) { System.out.println("Uspesno dodat autor"); return true; metoda vratiAutora,zaboravio sam da dodam: public static Autor vratiAutora(String imePrezime){         String sql="SELECT * FROM autori" +                     " WHERE autor='"+imePrezime+"'";         BazaPodataka bp = BazaPodataka.getInstanca();         try {                 ResultSet rs = bp.select(sql);                 rs.next();                 imePrezime=rs.getString("autor");                 int godinaRodjenja=rs.getInt("godinaRodjenja");                 int godinaSmrti=rs.getInt("godinaSmrti");                 Autor autor = new Autor(imePrezime,godinaRodjenja,godinaSmrti);                 return autor;         } catch (SQLException e) {             System.out.println("Doslo je do greske pri dohvatanju podataka iz baze:"+e);             return null;         }     }

offline
  • Pridružio: 09 Avg 2011
  • Poruke: 15879
  • Gde živiš: Beograd

Druze, nista tu nema nelogicno.

if(vratiAutora(imePrezime)!=null)

Ako si upisao bilo sta osim tzv. null tipa podataka, komanda ce proci.

!= u programiranju znaci nije jednako.
== znaci jednako

Nisam strucnjak za Javu iako sam je malkice ucio, malo baratam Pythonom, ali ovo je prilicno jednostavno za razumeti.


Drugi deo ti je klasican loop. Radi se Query i ako je tacno onda se vraca True i print komanda, ako je netacno onda logicno ide False i nesto drugo ako je definisano.

Treci deo ti je klasicno izvlacenje iz baze podataka, treba da dobijes autora, tj. Ime i prezimu, godinu rodjenja i smrti.

Nista komplikovano, ako imas i malo programerskog iskustva, shvatices.

Ako sam nesto pogresio, neka me neko ispravi.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

if(vratiAutora(imePrezime)!=null)Ovo je metoda koja proverava da li u bazi postoji autor sa zadatim imenom i prezimenom. BazaPodataka je singlton (mada nije thread safe) nad kojim se izvršavaju upiti. U metodi koja vraća autora se najpre uzima instanca baze podataka, a onda se nad tom instancom izvršava upit gde se pokušava čitanje autora sa zadatim imenom i prezimenom iz baze podataka. Ukoliko se autor uspešno pročita (bez pojavljivanja izuzetka (exception-a)), kreira se nova instanca klase Autor sa odgovarajućim parametrima. Ukoliko se pak javi izuzetak, on se obrađuje u catch bloku gde se ispisuje odgovarajuća poruka i vraća se null.

try{ int i = bp.iudQuerry(sql); if(i==1) { System.out.println("Uspesno dodat autor"); return true; Ovo je blok koji se takođe "brani" od izuzetaka. iudQuerry je verovatno metoda koja izvršava insert-update-delete upite i vraća 1 ukoliko je operacija uspešna. Takođe, ta metoda verovatno može da baci exception koji se takođe obrađuje u catch bloku ispod.

offline
  • Pridružio: 22 Maj 2016
  • Poruke: 4

buni me !=null,null je "praznina".Ako polje nije prazno,ne mora da znaci da ima isto ime kao ono sto smo mi uneli.Tako sam ja shvatio.

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14824
  • Gde živiš: Niš

Ne mešaj NULL u bazama podataka sa NULL-om u programskim jezicima. Semantika je slična, ali u ovom slučaju ima razlike. Ovde proveravaš da li ono što vraća metoda vratiAutora ukazuje na neki objekat (dakle objekat koji je kreiran u toj metodi, ceo red, a nejedno polje u bazi) ili pak ni na šta (ukoliko autor ne postoji u bazi ne kreira se ništa i vraća se null).

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

U ovom slucaju ti proveravas dali je vrednost razlicita od NULL. Rezultata nema i objekata se ne kreira zato dobijas i prazan rezultat.

offline
  • Pridružio: 22 Maj 2016
  • Poruke: 4

sada mi je dosta jasnije..hvala svima na odgovorima!

Ko je trenutno na forumu
 

Ukupno su 870 korisnika na forumu :: 44 registrovanih, 5 sakrivenih i 821 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: acov34, Apok, babaroga, Bane san, belov, Ben Roj, bigvlada, Dambi, Dare, dearg, dendrit86, Dimitrise93, Django777, djboj, dzoni19, Georgius, Griffon vulture, HogarStrashni, IAR80, jalos, Jozo74, markomacii9, MB120mm, Mi lao shu, milanovic, MiloradKomadic, Mskok, Nemanja.M, neutrino, OtacMakarije, panzerwaffe, pirke96, repac, Rothmans, ruso, S2M, Silvertooth, smerch, sspp, Tila Painen, volimpivuvolimrakiju, x011, zeo, Zvrk