Poslao: 22 Maj 2016 21:50
|
offline
- shocknp
- Novi MyCity građanin
- 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.
|
|
|
Poslao: 22 Maj 2016 22:58
|
offline
- shocknp
- Novi MyCity građanin
- 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;
}
}
|
|
|
|
Poslao: 22 Maj 2016 23:32
|
offline
- TwinHeadedEagle

- Anti Malware Fighter
Rank 2
- 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.
|
|
|
|
Poslao: 22 Maj 2016 23:37
|
offline
- vasa.93

- Moderator foruma
- 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.
|
|
|
|
Poslao: 23 Maj 2016 00:10
|
offline
- shocknp
- Novi MyCity građanin
- 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.
|
|
|
|
Poslao: 23 Maj 2016 06:34
|
offline
- vasa.93

- Moderator foruma
- 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).
|
|
|
|
Poslao: 23 Maj 2016 07:52
|
offline
- 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.
|
|
|
|
|