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

Jedan SQL Statement za celu aplikaciju

[es] :: Java :: Jedan SQL Statement za celu aplikaciju

[ Pregleda: 2074 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.metrohive.neobee.net.

Jabber: DarkMan


Profil

icon Jedan SQL Statement za celu aplikaciju15.10.2005. u 13:12 - pre 225 meseci
Za konekciju ka bazi znam da je normalno da se kreira na pocetku rada aplikacije i da se zatvori na kraju. Mene zanima da li ima neki problem da se isto to uradi i sa Statement-om, tacnije da se i on kreira na pocetku aplikacije a zatvori na kraju pri cemu ce se taj jedan statement koristiti kroz celu aplikaciju?

Znaci do sada sam radio ovako:
Code:

                Statement stmt = dataProvider.connection.createStatement();
                ResultSet rset = stmt.executeQuery("...");
                ...
                rset.close();
                stmt.close();

a sad hocu da izbegnem konstantno kreiranje statementa i da uvek koristim taj jedan u svim klasama gde mi je potrebno.
Ima li mozda neki razlog da ne uradim tako?
 
Odgovor na temu

tweeester
Ivan Arandjelovic
bg yu

Član broj: 724
Poruke: 882
*.kc.vicert.com.

Sajt: www.javasvet.net


Profil

icon Re: Jedan SQL Statement za celu aplikaciju15.10.2005. u 14:14 - pre 225 meseci
Ima razloga dosta, za pocetak nije "threadsafe", dalje, ne mozes na jednom statement-u da imas dva result set-a istovremeno (a trebace ti sigrno u nekom momentu), dalje, mislim da bi doslo do ogromnih resource leak-ova kada bi predugo koristio taj statement (na samom db serveru), i na kraju, nema razloga da to radis, osim ako imas neki prepared statement koji je skup pa hoces da ga kesiras (ali onda bi morao da ga obezbedis od simultanog koriscenja), itd. itd.

Pozdrav

<< tko leti vrijedi, tko ne leti ne vrijedi >>
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.metrohive.neobee.net.

Jabber: DarkMan


Profil

icon Re: Jedan SQL Statement za celu aplikaciju17.10.2005. u 19:12 - pre 225 meseci
Ok, vidim da ima razloga samo nesto bas nisam razumeo:

Citat:
tweeester: ...nije "threadsafe"...


Moze li malo detaljnije ovo da pojasnis? Da li si mislio da nije dobro ako ce se taj isti statement koristiti u dva thread-a pa postoji mogucnost da se zbog lose sinhronizacije pozove istovremeno na dva mesta?

Citat:
tweeester:...ne mozes na jednom statement-u da imas dva result set-a istovremeno ...


Ja sam mislio da svaki poziv metode executeQuery() vraca rezultate u novi ResultSet koji je nezavisan od statement-a. Da li to znaci da on ustvari vraca referencu na jedan ResultSet pa zato ne moze biti vise njih?

Inace, stavio sam u program samo jedan statement i za sada nisam imao problema. Mislio sam na taj nacin da rasteretim memoriju kreirajuci statement samo jednom umesto pri svakom obracanju bazi. Ne razumem sto u javi ipak nisu ostavili mogucnost da se neka klasa totalno unisti nego se uvek moramo oslanjati na garbage collector da obavi svoj posao. Zato java trosi memoriju ko luda.

Pozdrav
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
*.metrohive.neobee.net.

Jabber: DarkMan


Profil

icon Re: Jedan SQL Statement za celu aplikaciju18.10.2005. u 14:10 - pre 225 meseci
Upravo sam probao da jedan statement koristim za dobijanje vise ResultSet-ova i sve radi OK.
Code:

            Statement stmt = conn.createStatement();
            ResultSet rset1 = stmt.executeQuery("select ID, NAME from TABLE1");            
            while(rset1.next()) {
                ResultSet rset2 = stmt.executeQuery("select ID, NAME from TABLE2 where ID = " + rset1.getLong(1));
                if(rset2.next())
                    System.out.println(rset1.getString(1) + " " + rset1.getString(2) + " " + rset2.getString(2));
                else
                    System.out.println(rset1.getString(1) + " " + rset1.getString(2) + " not found");
                rset2.close();
            }
            rset1.close();
            stmt.close();
 
Odgovor na temu

tweeester
Ivan Arandjelovic
bg yu

Član broj: 724
Poruke: 882
*.kc.vicert.com.

Sajt: www.javasvet.net


Profil

icon Re: Jedan SQL Statement za celu aplikaciju18.10.2005. u 15:45 - pre 225 meseci
Citat:
DarkMan: Upravo sam probao da jedan statement koristim za dobijanje vise ResultSet-ova i sve radi OK.

... dok ne probas neke druge JDBC driver-e ili ne upotrebis PreparedStatement (koji ti ne gine za iole upotrebljiv statement)

[Ovu poruku je menjao tweeester dana 18.10.2005. u 16:48 GMT+1]
<< tko leti vrijedi, tko ne leti ne vrijedi >>
 
Odgovor na temu

DarkMan
Darko Matesic

Član broj: 20445
Poruke: 572
80.74.166.*

Jabber: DarkMan


Profil

icon Re: Jedan SQL Statement za celu aplikaciju18.10.2005. u 19:17 - pre 225 meseci
Citat:
tweeester: ... dok ne probas neke druge JDBC driver-e ili ne upotrebis PreparedStatement (koji ti ne gine za iole upotrebljiv statement) ;)


U pravu si. Dosta toga zavisi od samih JDBC driver-a tako da su problemi ipak moguci.
 
Odgovor na temu

[es] :: Java :: Jedan SQL Statement za celu aplikaciju

[ Pregleda: 2074 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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