Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Java rad sa bazom podataka(SQLite)

[es] :: Java :: Java rad sa bazom podataka(SQLite)

[ Pregleda: 2739 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

shocknp
zeljko maksimovic
beograd

Član broj: 333605
Poruke: 20
*.dynamic.sbb.rs.



Profil

icon Java rad sa bazom podataka(SQLite)22.05.2016. u 22:01 - pre 95 meseci
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!
 
Odgovor na temu

galaksija
Novi Sad

Član broj: 49290
Poruke: 82



+4 Profil

icon Re: Java rad sa bazom podataka(SQLite)22.05.2016. u 22:32 - pre 95 meseci
Code:

if(vratiAutora(imePrezime)!=null)


Gde ti je metoda "vratiAutora(imePrezime)" ?

 
Odgovor na temu

shocknp
zeljko maksimovic
beograd

Član broj: 333605
Poruke: 20
*.dynamic.sbb.rs.



Profil

icon Re: Java rad sa bazom podataka(SQLite)22.05.2016. u 22:42 - pre 95 meseci
Evo metode,izvinjavam se

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;
}


}
 
Odgovor na temu

galaksija
Novi Sad

Član broj: 49290
Poruke: 82



+4 Profil

icon Re: Java rad sa bazom podataka(SQLite)22.05.2016. u 23:04 - pre 95 meseci
Ovako, nije ništa komplikovano:

Prvo se postavlja upit bazi podatka
Code:
SELECT * FROM autori WHERE autor=imePrezime
u metodi "vratiAutora", gde je "imePrezime" vrednost koja se dobija iz parametra u metodi
Code:
vratiAutora(String imePrezime)


Nakon izvršavanja gorenavedenog upita proverava se da li postoji neka vrednost...
Code:
if(vratiAutora(imePrezime)!=null)


Ako je vrednost različita od "null" samo se izlazi iz if bloka, a ako vrednost "null" onda se izvršava "else" deo
String sql = "INSERT INTO autori(autor,godinaRodjenja,godinaSmrti)" +
Code:
VALUES('" + imePrezime + "'," + godinaRodjenja + "," + godinaSmrti + ")"; 
BazaPodataka bp = BazaPodataka.getInstanca(); 


Nadam se da je sada malo jasnije.

PS: Ako profesor ili već ko preglada ovaj kod nije tražio malo bolje rešenje onda je sve OK, a ako jeste onda bi trebalo da razmisliš oko dosta stvari..Singleton, Preference za...tako to, da ne dužim.

 
Odgovor na temu

shocknp
zeljko maksimovic
beograd

Član broj: 333605
Poruke: 20
*.dynamic.sbb.rs.



Profil

icon Re: Java rad sa bazom podataka(SQLite)22.05.2016. u 23:20 - pre 95 meseci
Izgleda da nisam dobro razumeo tekst zadatka.ovde je moguce kreiranje autora ukoliko ne postoji isti takav autor u bazi ili deo koda if(vratiAutora(imePrezime)!=null)
samo trazi prazno mesto kako bi smestio autora kojeg zelimo da ubacimo?

[Ovu poruku je menjao shocknp dana 23.05.2016. u 00:31 GMT+1]
 
Odgovor na temu

galaksija
Novi Sad

Član broj: 49290
Poruke: 82



+4 Profil

icon Re: Java rad sa bazom podataka(SQLite)22.05.2016. u 23:33 - pre 95 meseci
Tačno.
 
Odgovor na temu

shocknp
zeljko maksimovic
beograd

Član broj: 333605
Poruke: 20
*.dynamic.sbb.rs.



Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 00:04 - pre 95 meseci
Imam jos dosta pitanja jer sam tek poceo da radim sa bazama podataka u javi,ali navescu par koja su mi veoma bitna.Ukoliko budete u mogucnosti zamolio bih vas da mi odgovorite i puno vam hvala na prethodnim odgovorima.


1)
Code:
int i = bp.iudQuerry(sql); 
    if(i==1) { 

Ovde znam da je iudQuerry iz klase BazaPodataka-(konekcija) i da je metoda za upite tipa insert,delete,update,ali mi nije jasno kako radi i sta je
Code:
Statement statement = conn.createStatement();
u okviru ove metode?
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2) Kod
Code:
BazaPodataka bp = BazaPodataka.getInstanca();
koji se nalazi u metodi kreirajAutora- else delu petlje, nije mi jasno zbog cega se nalazi u metodi
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3) U metodi vratiAutora nije mi jasan deo koda
Code:
ResultSet rs = bp.select(sql);
Sta je ResultSet i select(metoda iz klase BazaPodataka)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

4) Metoda vratiAutore ispisuje sve podatke iz baze,to mi je jasno. Da li onda metoda kreirajAutora vuce listu Autor koja je kreirana metodom vratiAutore
 
Odgovor na temu

dule_ns
Novi Sad

Član broj: 123863
Poruke: 257
195.78.86.*



+690 Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 14:54 - pre 95 meseci
Ajde molim te stavi sav svoj kod u code blok pa da ti napišem šta ti sve ne valja ili se ne praktikuje.
 
Odgovor na temu

shocknp
zeljko maksimovic
beograd

Član broj: 333605
Poruke: 20
*.dynamic.sbb.rs.



Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 18:43 - pre 95 meseci
resenje zadatka:

Code:
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):

Code:
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); 



metoda vrati autora:
Code:
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;
}


}

izgled baze:

[img]http://postimg.org/image/4c50hczqp/[/img]

Meni je samo bitno da se objasni ovo iznad sto sam naveo
 
Odgovor na temu

galaksija
Novi Sad

Član broj: 49290
Poruke: 82



+4 Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 20:16 - pre 95 meseci
UF, teško je odgovoriti na ovakvo(va) pitanja....

Željko, nadam se da se tako zoveš, da li uopšte znaš kakv(o)a pitanja postavljaš ?

Sada kada bi svi ovde na ovom forumu počeli da ti odgovaraju, zajedno sa mojom malenkošću, mislim da bi potrajalo.
Svi su u jednom momentu počeli učenje programskog jezika, bilo da je to: JAVA, C++, PHP, etc...

Skoro svaki programski jezik počinje sa istom osnovom(Bilo koji FAKULTET je dobro došao), sve se svodi otprilike na isto...svođenje na binarni kod koji računar ili ti mikrokontroler može da razume i obradi.

Kada bi se vodili nekom hijerahijom to bi bilo BINARNO---ASM---C-----C++---JAVA---etc, možda mi zamere neki na ovom ali u principu je tako.

Tebi ustvari treba neko da ti to objasni LIVE...




 
Odgovor na temu

galaksija
Novi Sad

Član broj: 49290
Poruke: 82



+4 Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 20:22 - pre 95 meseci
Bilo bi super kada bi se neki članovi ujedinli i...npr...napravili SKYPE grupu, pa malo diskusija, što da ne.

Evo može i večeras, moj SKYP je chugalldean.
 
Odgovor na temu

galaksija
Novi Sad

Član broj: 49290
Poruke: 82



+4 Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 20:31 - pre 95 meseci
Ako želiš -1 to 1 - imam i online platfomu pa mogu da ti sve objasnim, naravno može da se sva priključi i da doprinese. Pazi ovo se dešava u realnom vremenu ... može sada odmah ... samo reci
 
Odgovor na temu

galaksija
Novi Sad

Član broj: 49290
Poruke: 82



+4 Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 20:32 - pre 95 meseci
Naravno sve je besplatno !
 
Odgovor na temu

shocknp
zeljko maksimovic
beograd

Član broj: 333605
Poruke: 20
*.dynamic.sbb.rs.



Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 20:52 - pre 95 meseci
Niste me razumeli,ne zelim toliko duboko da zalazim zasada.Vise sam mislio na objasnjenje tipa "BazaPodataka.getInstanca();" vraca to i to,prima to i to,zbog cega se ubacuje u metodu i slicno..
Nazalost za nemam ni kameru,a ni mikrofon kako bi mogli live da komuniciramo. Hvala vam sto ste se ponudili!
 
Odgovor na temu

dule_ns
Novi Sad

Član broj: 123863
Poruke: 257
*.dynamic.sbb.rs.



+690 Profil

icon Re: Java rad sa bazom podataka(SQLite)23.05.2016. u 23:06 - pre 95 meseci
1) Da li koristiš neko razvojno okruženje. Ako je odgovor da onda za ona pitanja šta radi koja linija koda lepo tu liniju zakomentarišeš pa vidiš čemu služi. ako ne, počni da koristiš (ja recimo koristim Eclipse, ali ima i drugih)

2)

Code:
String sql = "INSERT INTO autori(autor,godinaRodjenja,godinaSmrti)" + 
        " VALUES('" + imePrezime + "'," + godinaRodjenja + "," + godinaSmrti + ")";


Code:
String sql="SELECT * FROM autori" +
        " WHERE autor='"+imePrezime+"'";


Ovo nemoj raditi. Ako imaš SQL upite sa promenjivama bolje koristi PreparedStatement.

3) Ne zatvaraš resurse (konekcija, resultSet).

Ajde da ti ja dam primer kako se to može malo drugačije uraditi. Recimo da u klasi BazaPodataka imaš još metodu

Code:
public Connection getConn() {
        return conn;
    }


onda vratiAutora može ovako da izgleda

Code:
    public static Autor vratiAutora2(String imePrezime) {
        
        String sql = "SELECT * FROM autori WHERE autor= ?";
        
        BazaPodataka bp = BazaPodataka.getInstanca();
        
        PreparedStatement ps = null;
        
        ResultSet rs = null;
        
        try {
//            kreiranje prepared statementa
            ps = bp.getConn().prepareStatement(sql);
            
//            ovo kod tebe nije neophodno ali prepared statement se cesto koristi
//            za vise upita u petlji pa dodje kao neka navika
//            cisti parametre od prethodnog upita
            ps.clearParameters();
            
            ps.setString(1, imePrezime);
            
            rs = ps.executeQuery();
            
//            posto za tvoj upit nisi siguran da ce ti biti vracen rezultat (ako nema podataka u bazi)
//            koristi if da ne bi dobio exception
            if (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) {
            e.printStackTrace();
        } finally {
            if (rs != null) {try {rs.close();} catch (SQLException e) {}}
            if (ps != null) {try {ps.close();} catch (SQLException e) {}}
        }
        
        return null;
        
    }
 
Odgovor na temu

[es] :: Java :: Java rad sa bazom podataka(SQLite)

[ Pregleda: 2739 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.