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: 14809
  • 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
  • Research Engineer @MalwareBytes
  • Pridružio: 09 Avg 2011
  • Poruke: 15877
  • 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: 14809
  • 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: 14809
  • 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 477 korisnika na forumu :: 4 registrovanih, 1 sakriven i 472 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: Dorcolac, marsovac 2, mrav pesadinac, voja64