RE: for vs. while - problemy s SQL Drivery

2006-08-25 Tema obsahu Petr Zajíc
Ano, nebo zvolíte řešení typu iBatis ;-). To jsme se dostali daleko od 
původního tématu, co?

Petr

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Behalf Of Rastislav Rehak
Sent: Friday, August 25, 2006 10:40 AM
To: Java
Subject: Re: for vs. while - problemy s SQL Drivery


Ked to takto pojde dalej, tak zistite, ze najlepsie by bolo pouzivat 
daku kniznicku, ktora to bude za vas vzdy zatvarat a ked mam 
PreparedStatement tak nech sa nestaram o cislovanie parametrov , 
pripadne nech cely riadok natiahne do pola alebo beanu.
Napriklad : http://jakarta.apache.org/commons/dbutils/
a kod potom moze vyzerat takto :

// Create a QueryRunner that will use connections from
// the given DataSource
QueryRunner run = new QueryRunner(dataSource);

// Execute the query and get the results back from the handler
Object[] result = (Object[]) run.query(
"SELECT * FROM Person WHERE name=?", "John Doe", h);

Samozrejme vam nestaci len prvy riadok ako pole, tak mozete pouzit 
ResulSetHandler objekt :


new QueryRunner().query(conn, "select  ",new Object[]{id}, // v 
poli su dake parametre do PreparedStatement
  new ResultSetHandler() {
public Object handle(ResultSet rs) throws SQLException {
  while( rs.next()){
   // tu je daco uzitocne
  }
  return null;
}
  }


Bye Ra100



Re: for vs. while - problemy s SQL Drivery

2006-08-25 Tema obsahu Rastislav Rehak
Ked to takto pojde dalej, tak zistite, ze najlepsie by bolo pouzivat 
daku kniznicku, ktora to bude za vas vzdy zatvarat a ked mam 
PreparedStatement tak nech sa nestaram o cislovanie parametrov , 
pripadne nech cely riadok natiahne do pola alebo beanu.

Napriklad : http://jakarta.apache.org/commons/dbutils/
a kod potom moze vyzerat takto :

// Create a QueryRunner that will use connections from
// the given DataSource
QueryRunner run = new QueryRunner(dataSource);

// Execute the query and get the results back from the handler
Object[] result = (Object[]) run.query(
   "SELECT * FROM Person WHERE name=?", "John Doe", h);

Samozrejme vam nestaci len prvy riadok ako pole, tak mozete pouzit 
ResulSetHandler objekt :



new QueryRunner().query(conn, "select  ",new Object[]{id}, // v 
poli su dake parametre do PreparedStatement

 new ResultSetHandler() {
   public Object handle(ResultSet rs) throws SQLException {
 while( rs.next()){
  // tu je daco uzitocne
 }
 return null;
   }
 }


Bye Ra100



Re: for vs. while - problemy s SQL Drivery

2006-08-25 Tema obsahu Jan Dvořák
My jsme se s tim setkali u oracliho thin driveru pro 9.2. Kdyz clovek 
nezaviral resultsety, za chvili se server zacal zdrahat odpovidat na 
dotazy - stezoval si, ze "Too many open cursors".


Myslim, ze uzitecna sablona kodu je:

final ResultSet rs = stmt.executeQuery();
try {
   while ( rs.next() ) {
  processRow( rs );
   }
} finally {
   rs.close();
}

Osetrovani SQLException zaridite v nejakem vnejsim bloku try, prece to 
nebudete psat nekolikrat.
Kdyz vylitne vyjimka v prvnim radku, nemate resultset a neni tedy ani co 
zavirat. Jakmile vsak resultset mate, tak ho urcite zavrete.

Ciste, prehledne.

Obcas se vidi takove veci jako:

ResultSet rs = null;
try {
   rs = stmt.executeQuery();
   while ( rs. next() ) {
  processRow( rs );
   }
} catch ( SQLException e ) {
   e.printStackTrace();  
} finally {

   if ( rs != null ) {
  try {
  rs.close();
  } catch ( SQLException e ) {
 e.printStackTrace();
  }
   }
}

- coz je proste silene.

Honza


Moravec Jan napsal:

U jakeho presne driveru jsem se s problemem nezavirani RS setkal si jiz 
nepamatuji. Dost mozna i ten zminovany Oracle OCI driver.

Ono zavisi hodne na kontextu a zpusobu pouziti PS a RS. Pokud napriklad otevirate z jednoho PS vice result setu, 
jak intepretovat ponekud vagni javadoc u Statement.close "When a Statement object 
is closed, its current ResultSet object, if one exists, is also closed."

Jaky z tech x otevrenych RS je ten "current"? Jsou to 


a) vsechny
b) posledni otevreny
c) posledni iterovany

Jak jsem psal, PS jsou navic casto cachovany, takze pokud volate PS.close ve 
finaly, nemusi to ale VUBEC znamenat, ze se Vam zavrou result sety asociovane s 
tim PS, protoze jeho close metoda se v zaveru ani nezavola (zavola se close na 
nejakym wrapperu, ktere ten PS POUZE vrati do poolu).

Tj. shrnuto podtrzeno, RS zavirat vzdy explicitne a neni problem. Spolehat na 
PS.close/finalizator apod -> povesit programatora za usi do pruvanu.

Off topic: S tim Oracle driverem jsme mi pripomnel jinou perlu jejich driveru. 
Pri praci s LOBy se musely PS castovat na Oracle specificke implementace, aby 
bylo mozne volat metody pro praci s LOBy. Standardni java.sql.Clob/Blob 
nefungovaly. Doufam, ze uz s tim neco udelali... toto bylo pred cca 3 roky.

Honza

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Behalf Of Artur Linhart - Java Communication
Sent: Thursday, August 24, 2006 10:46 AM
To: Java
Subject: Re: for vs. while - problemy s SQL Drivery


.Myslim, ze s nejakym podobnym nestandardnim chovanim jsme se setkali v
pripade Oracle 9.2.0.1 driveru, ktere obsahovaly mimo jine i nekolik chybek
v tehle oblasti. Uz je to dele, ale problem byl mam dojem nejen s uzaviranim
pripojeneho resultsetu, ale i s tim, ze se sam statement neuvolnoval
korektne ackoliv by podle standardu mel pote co se spusti garbage
collector - urcite se vyplaci volat close primo na statementu stejne jako
predtim na resultsetu ktery byl pres statement vytvoren.

Prestoze javadoc u metody java.sql.Statement.close() tvrdi
 "A Statement object is automatically closed
 * when it is garbage collected. When a Statement object is
 * closed, its current ResultSet object, if one exists, is
 * also closed.  "
- nemusi byt obecne pravda ani prvni, ani druha veta, holt jako vzdy zalezi
na tom, jak se ten interface naimplementuje. Takze pokud si nejste
stoprocentne jisti (coz neni asi nikdy :-) ) tak by se ten close mel asi
volat vsude kde to jde...
Jinak - slo o oci8 driver, mozna ze u nativniho, ktery bohuzel pouzivat
nemuzeme, to funguje spravne, to nevim...

Uz je to sice hodne off topic od puvodniho tematu, ale napada mne napr.
mimodek i dalsi chyba na kterou jsme narazili v Oracle driverech se kterou
jsme se opravdu hodne hodne vyvztekali nez jsme na ni prisli - a to je
problem s datovym typem timestamp a jeho prevodem na javovsky Timestamp, u
ktereho se v pripade, ze je pocet milisekund nacteny z databaze 0 jako pocet
milisekund "naindukuje" jine cislo nezli 0.
Jinymi slovy, jak mi pomohl kolega Michal s upresnenim: pri cteni Timestamp
s 0 ms je vracena hodnota ms z posledniho cteneho Timestampu ktery mel ms <>
0. Jednoduse, pokud tam bylo 0 ms, tak ten driver jakoby ten udaj "ms" nijak
nemenil, takze tam zustala predesla hodnota.

 - tzn. pokud napr. pouzivate Oracle timestampy k overeni, jestli se Vam
zaznam nezmenil v mezidobi mezi dvema selecty, je dobre na podobne policko
pripojit primo na urovni databaze trigger, ktery nejenom ze pri updatu
nastavuje vzdy aktualni hodnotu casu, ale v pripade, ze pocet milisekund je
0, tak je trosicku postrci o milisekundu, aby nacitani pres JDBC do typu
Timestamp potom fungovalo spravne - my to delame momentalne takhle:

create or replace trigger TU_BC_COUNTRY
before update on BC_COUNTRY
for each row
declare
  locMs int;
  loc_current_GMT_timestamp TIMESTAMP(3);
begin
  loc_current_GMT_timestamp := current_timestamp at time zone 'GMT';
  :new.CHANGE_DATE := loc_curr

Re: TODO anotece + nastroj na jejich cteni

2006-08-25 Tema obsahu Benda Lukas
No prave ze ja pouzivam XEmacs + JDEE, prave proto jsem chtel najit 
nejakou univerzalnejsi metodu jak tyto TO-DO poznamky psat nezavisle na 
IDE. No v XEmacsu pouziji grep jak jsem prave dostal radu + muzu pouzit 
standardni TODO manager pro Emacs.


No ale podle vseho kdyz se da tag @todo do dokumentace, tak maven 
defaultne umi vygenerovat html stranku se vsemy "nedodelky". No a taky 
jsem dosal typ na tag ktery s pomoci xdoclet umi takovou stranku 
vygenerovat i pod antem.


Takze nakonec pouziji asi grep pro @todo tag, take to budu mit rychle 
dostupne v mojem IDE a taky vygenerovatelne napriklad na stranky.


Lukas "benzin" Benda ([EMAIL PROTECTED];  http://benzin.bloguje.cz)
 Java a Delphi programator
 PHP a JavaScript skrypter
 Tvurce databazovych aplikaci
 A "cestinarsky" ignorant


Re: dom4j a mixed content

2006-08-25 Tema obsahu Jan Dvořák

Martin Kuba napsal:

Petr Šimek wrote:

Dobry den,
snazim se pomoci dom4j prochazet existujici xml soubor, ale mam 
problem, kdyz narazim na element, ktery obsahuje mixed content.

Napr.
Auto je cervene.

Pak mi u sekce element.getText(); vrati cely text elementu, bez 
vnoreneho emp, tj. vrati:

Auto cervene.
Ale ja bych potreboval v tu chvili v necem dostat informaci, ze jsou 
tam tri potomci, tj. nejdriv text Auto, pak element emp a pak text 
cervene.


Ale k tomu se nemuyu dopracovat, poradite mi?

SAXReader reader = new SAXReader();
Document document = reader.read("pokus.xml");

Element root = document.getRootElement();

for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
  Element element = (Element) i.next();
  // do something
}


Neznam sice DOM4J, ale dle svych zkusenosti s JDOM bych si tipnul,
ze chyba je ve volani getText(). Podle rychle vygooglovaneho javadocu
dela "Returns the text value of this element without recursing through 
child elements. This method iterates through all Text,CDATA  and 
Entitynodes that this element contains and appends the text values 
together."

Spravny postup bude zavolat selectNodes("*"), coz vraci seznam
uzlu, jenz jsou potomky.

Jadro zakopaneho pudla je v tom, ze texty jsou uzly (Node), ale nejsou
elementy (Element), takze elementIterator() je nemuze vratit.
Zkuste tedy neco jako:

for(Iterator i = root.selectNodes("*").iterator();i.hasNext();) {
 Node node = (Node).i.next();
 if(node.getNodeType()==Node.TEXT_NODE) {
 ...
 } else if(node.getNodeType()==Node.ELEMENT_NODE) {
 ...

}

Jen pro srovnani, v JDOMu bych zavolal Element.getChildren(),
coz je jednodussi o ten XPath vyraz.
V dom4j si iterator poridis jako element.nodeIterator(). Tahle vecicka 
je v Branch, ze ktere Element dedi.


Honza Dvorak




Re: Vygenerovani JavaBeanu z interface

2006-08-25 Tema obsahu Vlastimil Eliáš




Jde o to ze ty interface jiz mam (jsou soucasti rozhrani nejake
abstraktni sluzby kterou ted implementuji) 
a jen pro ne musim delat implementaci, tedy ty beany. 
Nakonec jsem si ten plugin napsal sam, tedy lepe receno jsem si tu
funkci dopsal do pluginu commonclipse 
ve kterem jsem nasel dobrou inspiraci. Az budu mit vice casu tak se to
pokusim nejak ucesat 
a dat to do nejakeho opensource pluginu k dispozici.
Lenost (zda napr. v rucnim psani fieldu) je holt zakladni hybnou silou
IT :-)

Vl.

Vladimir Bobes Tuzinsky napsal(a):
V tom pripade mozete postupovat tak, ze si vytvorite
prazdny interface aj jeho implementaciu, do nej date fieldy,
vygenerujete metody a pomocou "pull members up" potiahnete gettre do
interfacu. Pouzivam IDEU, ale predpokladam, ze v Eclipse je takyto
refactoring tiez mozny... :)
  
  
  On 24/08/06, Vlastimil Eliáš <[EMAIL PROTECTED]>
wrote:
  No
to prave znam, to genetuje gettery a settery z fieldu. Ja ale
potrebuji fieldy vygenerovat
z getteru, tedy obraceny postup.

Vl.

Pavel Kubal napsal(a):
> prave tlacitko Source/Generate Getter and Setter ?

>
> - Original Message - From: "Vlastimil Eliáš"
> <[EMAIL PROTECTED]>
> To: 
> Sent: Thursday, August 24, 2006 4:58 PM
> Subject: Vygenerovani JavaBeanu z interface
>
>
>> Zdravim,
>>
>> chtel bych v Eclipse vytvorit JavaBean ktery implementuje
nejaky

>> interface, ale tak aby se
>> mi v tom JavaBeanu automativky vygenerovali fieldy a settery
pro
>> gettery ktere mam v
>> tom interface.
>> Nejak nemuzu prislusnoy funkci v eclipse nalezt, bud jsem
slepy nebo

>> tam neni?
>> Mne to prijde jako celkem uzitecna funkce kdyz clovek dela
value
>> objekty .
>> Nezna nekdo nejaky plugin ktery by toto umel?
>> Google nepomohl.
>>
>> Diky
>>
>> Vl.
>>
>>
>> !DSPAM:44edbec6214195297216241!
>>
>>
>
>

--
Ing. Vlastimil EliasQbizm technologies, a.s.
vedouci analytik... the art of software.

www.qbizm-technologies.cz
www.qbizm.cz  www.qbizm-services.cz

  
  
  


-- 
Ing. Vlastimil EliasQbizm technologies, a.s.
vedouci analytik... the art of software.

www.qbizm-technologies.czwww.qbizm.cz  www.qbizm-services.cz