JDBC: conséquences d'une non-fermeture de connection et ou statement

JDBC: conséquences d'une non-fermeture de connection et ou statement - Java - Programmation

Marsh Posté le 31-07-2002 à 21:25:19    

Hop,
 
Voudrais juste savoir quelles POURRAIENT etre les conséquences (tous points de vue) si on "oubliait" de fermer une Connection jdbc, ou (ça m'interesse plus dans ce cas-ci), un Statement.
 
 :jap:


Message édité par --greg-- le 31-07-2002 à 21:33:19
Reply

Marsh Posté le 31-07-2002 à 21:25:19   

Reply

Marsh Posté le 31-07-2002 à 22:28:05    

up, tudju

Reply

Marsh Posté le 31-07-2002 à 22:29:01    

à long terme et dans un environnemnt web, ton proc est occupé à 100%


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 31-07-2002 à 22:29:56    

DarkLord a écrit a écrit :

à long terme et dans un environnemnt web, ton proc est occupé à 100%



elles vont pas se faire jeter toutes seules au bout d'un moment alors...

Reply

Marsh Posté le 31-07-2002 à 22:31:52    

non


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 31-07-2002 à 22:32:54    

merde ça suxxe.
je sens qu'on va me faire chier dans pas lgtps.
putain de couille

Reply

Marsh Posté le 31-07-2002 à 22:33:59    

--greg-- a écrit a écrit :

merde ça suxxe.
je sens qu'on va me faire chier dans pas lgtps.
putain de couille




 
t'as encore programmé comme un porc toi :)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 31-07-2002 à 22:34:54    

DarkLord a écrit a écrit :

à long terme et dans un environnemnt web, ton proc est occupé à 100%




 
sûr ??? dans les finally du Statement ou du Connecion ca doit les fermer nan ? donc au bout d'un moment ils vont se fermer ...

Reply

Marsh Posté le 31-07-2002 à 22:35:20    

en J2EE non.
 
Edit: ce que je veux dire c'est que j'ai déjà programmer une servlet simple qui faisait des requetes débiles et que j'oublias de fermer les connections. Au bout d'un certain temps (meme sans faire d'autre requete sur le serveur) ca boucle et mon serveur est occupé à 100%
 
un c.close() et tout rentre dans l'ordre ...
 
Maintenant c'est peut etre du à une config pourrie de la DB chez nous et ca ne m'étonnerait pas non plus


Message édité par darklord le 31-07-2002 à 22:36:40

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 31-07-2002 à 22:38:51    

ben ... pkoi ils ont pas foutu un close dans le finalize ??? ca reglerait la plupart des problèmes ...

Reply

Marsh Posté le 31-07-2002 à 22:38:51   

Reply

Marsh Posté le 31-07-2002 à 22:39:33    

benou a écrit a écrit :

ben ... pkoi ils ont pas foutu un close dans le finalize ??? ca reglerait la plupart des problèmes ...




 
parce que c'est pas propre.


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 31-07-2002 à 22:39:52    

DarkLord a écrit a écrit :

 
 
t'as encore programmé comme un porc toi :)



c'était y'a LONGTEMPS.
(pour te dire, j'avais un truc fait en php que j'ai converti en jsp/servlet, tu vois le genre)
en fait les stmt je les fermais mais je retournais le resultset
(genre  
Resulset rs = truc;
stmt.close();
con.close();
 
return rs;
[:vomi]
et ça marchait, bizarrement
mais mtnt, paf changement de serveur (chgt de drivers mysql au passage aussi, sans doute), et ça marche pu. (mais bizarrement ça ne produit aucune exception, le rs est juste vide). si je ferme pas le stmt avec de retourner le rs, ça marche:) le hic c que jpeux pu fermer le stmt apres quoi, ou alors faut que je refasse toute cette merde, mais niet.)

Reply

Marsh Posté le 31-07-2002 à 22:52:39    

euh en fait
dans ma methode de merde
si je fais  
 

try {
  blahblah
  rs = truc;
  return rs;
} finally {
  stmt.close();
  con.close();
}


, le finally il est executé quand exactement? avant que la methode ne retourne "pour du vrai", nan? ou pas du tout? bref, dans un cas comme dans l'autre, ça va pas m'aider...

Reply

Marsh Posté le 31-07-2002 à 23:32:56    

--greg-- a écrit a écrit :

euh en fait
dans ma methode de merde
si je fais  
 

try {
  blahblah
  rs = truc;
  return rs;
} finally {
  stmt.close();
  con.close();
}


, le finally il est executé quand exactement? avant que la methode ne retourne "pour du vrai", nan? ou pas du tout? bref, dans un cas comme dans l'autre, ça va pas m'aider...




 
le finally est toujours executé !!  
là il ser aexecuté juste avant le return

Reply

Marsh Posté le 31-07-2002 à 23:34:01    

benou a écrit a écrit :

 
 
le finally est toujours executé !!  
là il ser aexecuté juste avant le return  



c bien ce qu'il me semblait.
bon ben
prout alors, je crois.

Reply

Marsh Posté le 31-07-2002 à 23:34:03    

DarkLord a écrit a écrit :

 
parce que c'est pas propre.




je vos pas le problème que ca te pose ...
 

Code :
  1. protected void finalize() throws Throwable {
  2.    if (! isClosed())
  3.       close();
  4. }

Reply

Marsh Posté le 31-07-2002 à 23:43:00    

en fait
si ça se trouve cette methode finalize est implementée dans les drivers. auquel cas, j'ai pas de soucis tant que ce sont les memes drivers qui sont utilisés..?
 
edit: ha ben tfaçons c pas le cas :/


Message édité par --greg-- le 01-08-2002 à 00:03:16
Reply

Marsh Posté le 01-08-2002 à 00:10:48    

--greg-- a écrit a écrit :

en fait
si ça se trouve cette methode finalize est implementée dans les drivers. auquel cas, j'ai pas de soucis tant que ce sont les memes drivers qui sont utilisés..?
 
edit: ha ben tfaçons c pas le cas :/




comment tu sais ? t'as les sources ?
 
et en principe oui, c'est là de dans que ca devrait être implémenté ...

Reply

Marsh Posté le 01-08-2002 à 00:21:34    

benou a écrit a écrit :

 
comment tu sais ? t'as les sources ?
 
et en principe oui, c'est là de dans que ca devrait être implémenté ...



yep, j'ai les sources, et c'est pas implementé.

Reply

Marsh Posté le 02-08-2002 à 12:26:27    

benou a écrit a écrit :

 
je vos pas le problème que ca te pose ...
 

Code :
  1. protected void finalize() throws Throwable {
  2.    if (! isClosed())
  3.       close();
  4. }






Le probleme c'est justement quand tu veux retourner un ResultSet, si tu fermes le Statement, le ResultSet est vidé alors ca devient un peu chiant ...
 
Et puis pour les connections, normalement, y'a un timer qui les tuent au bout d'un certain temps (20 minutes je crois).
D'autre part, si tu fermes pas tes connections, tu satures la base en ouvrant trop de curseurs et la tu te fais jeter (en tout cas sur Oracle) !

Reply

Marsh Posté le 02-08-2002 à 14:20:32    

chapi456 a écrit a écrit :

 
Le probleme c'est justement quand tu veux retourner un ResultSet, si tu fermes le Statement, le ResultSet est vidé alors ca devient un peu chiant ...



ben nan : il doit y avoir une réf au statement dans le resultset => il sera pas garbagé !
 
bizarre, j'étais vraimentpersuadé que ca y était ...

Reply

Marsh Posté le 02-08-2002 à 17:02:33    

ben c'est plutot le contraire, c'est le resultset qui est relié au statement ... donc il est vidé dès que tu close le statement ... c'est dans la doc, c'est pas une invention de ma part !

Reply

Marsh Posté le 02-08-2002 à 17:16:26    

chapi456 a écrit a écrit :

ben c'est plutot le contraire, c'est le resultset qui est relié au statement ... donc il est vidé dès que tu close le statement ... c'est dans la doc, c'est pas une invention de ma part !




j'ai pas dit que c'était pas le cas, j'ai juste dit que si le resultset contenanit une ref vers le statement (ce qui de grandes chances d'être le cas vu que les 2 objets sont liés) on ne risquait pas de perdre le resultset à cause du garbage collectig du statement ...

Reply

Marsh Posté le 02-08-2002 à 18:22:05    

Pour info, certaines BD (DB2 par ex) refusent de commiter si des rs ou des stmt sont ouverts.
 
Renaud

Reply

Marsh Posté le 02-08-2002 à 18:35:54    

- Renaud - a écrit a écrit :

Pour info, certaines BD (DB2 par ex) refusent de commiter si des rs ou des stmt sont ouverts.
 
Renaud



euh ? et il faut commiter quand on récupéré un resultset?  :heink:  
(je doute pas de ta parole, mais je capte pas l'idée là)
 
edit: bon j'avais pas compris ce que tu disais, désolé :)


Message édité par --greg-- le 02-08-2002 à 18:36:54
Reply

Marsh Posté le 02-08-2002 à 19:10:58    

un conseil : le mieux c'est de faire :

Code :
  1. finally {
  2. try{ stmt.close(); } catch(SQLException e) {}
  3. try{ con.close(); } catch(SQLException e) {}
  4. }


pour être sûr que la connection se ferme même dans les pires conditions de poisse

Reply

Marsh Posté le 02-08-2002 à 22:17:48    

R3g a écrit a écrit :

un conseil : le mieux c'est de faire :

Code :
  1. finally {
  2. try{ stmt.close(); } catch(SQLException e) {}
  3. try{ con.close(); } catch(SQLException e) {}
  4. }


pour être sûr que la connection se ferme même dans les pires conditions de poisse




bon
he
je sais comment on gere une cnx merci :D
faut tout lire:)

Reply

Marsh Posté le 02-08-2002 à 22:23:04    

--greg-- a écrit a écrit :

Hop,
Voudrais juste savoir quelles POURRAIENT etre les conséquences (tous points de vue) si on "oubliait" de fermer une Connection jdbc, ou (ça m'interesse plus dans ce cas-ci), un Statement.
 :jap:




Si tu dois changer ton code, penses à utiliser un pool de connexions plutôt que d'en ouvrir(-fermer) une à chaque fois que t'en as besoin.

Reply

Marsh Posté le 03-08-2002 à 03:11:28    

krosso a écrit a écrit :

 
Si tu dois changer ton code, penses à utiliser un pool de connexions plutôt que d'en ouvrir(-fermer) une à chaque fois que t'en as besoin.



:heink:

Reply

Marsh Posté le 05-08-2002 à 16:29:49    

--greg-- a écrit a écrit :

 :heink:  




 
T'as qu'a utiliser protomatter (fait un recherche sur google, tu tombera direct dessus), ça permet de fermer automatiquement les connections inactives au bout d'un certain temps que tu fixes toi même.
En fait, c un pool de connection, mais tu peux très bien l'utiliser pour une seule connection.
L'avantage, c que c'est l'implémentation d'un driver JDBC, du coup, t'auras pas grand chose à changer ds ton code si tu veux mettre ça em place.
Bon, normalement, cette option de pouvoir fermer les connections inactives, c pas fait pour être utilisé en production, bref, ça sera un peu crade, ms bon, apparement ton truc l'est déja pas mal, non !?:D


Message édité par El_gringo le 05-08-2002 à 16:30:16
Reply

Marsh Posté le 05-08-2002 à 16:40:45    

ouah comme il te cherche l'ot là :lol:
 


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-08-2002 à 16:41:29    

el_gringo, j'ai failli t'engueuler  
mais j'ai lu la fin de ton message qui est plus interessante :D
 
je SAIS ce qu'est un pool de cnx, je SAIS comment on utilise des cns, slt à l'epoque ou j'ai écrit la merde en question, manifestement je savais pas :o
 
l'idée d'utiliser protomatter cela dit c pas trop con: j'imagine qu'il s'utilise de maniere transparente et que je pourrais donc simplement remplacer le nom de mon driver?

Reply

Marsh Posté le 05-08-2002 à 17:44:14    

--greg-- a écrit a écrit :

el_gringo, j'ai failli t'engueuler  
mais j'ai lu la fin de ton message qui est plus interessante :D
 
je SAIS ce qu'est un pool de cnx, je SAIS comment on utilise des cns, slt à l'epoque ou j'ai écrit la merde en question, manifestement je savais pas :o
 
l'idée d'utiliser protomatter cela dit c pas trop con: j'imagine qu'il s'utilise de maniere transparente et que je pourrais donc simplement remplacer le nom de mon driver?




 
J'espère bien que tu sais ce qu'est un pool de connection. Bon, t pas encore un vieux sage du Java comme Darklord ou Benou, ms je t'attriburais qd même le status de grand garçon du Java, ce qui est déja pas mal, non !? :D)
Non, bon, je fais exprès pr t'emmerder parce que tu m'énerves, j'trouve que t'as un air supérieur quand tu t'adresses à moi (genre, mon idée est "pas trop conne". Ouah, ça c du remerciement comme je les aimes !)
 
Ouais, protomatter il s'utilise de manière transparente, c ce que j'essayais de te faire comprendre en te disant que un pool sous la forme d'un driver JDBC...:D


Message édité par El_gringo le 05-08-2002 à 17:45:07
Reply

Marsh Posté le 05-08-2002 à 17:48:00    

el_gringo a écrit a écrit :

 
Non, bon, je fais exprès pr t'emmerder parce que tu m'énerves, j'trouve que t'as un air supérieur quand tu t'adresses à moi (genre, mon idée est "pas trop conne". Ouah, ça c du remerciement comme je les aimes !)



disons que tu ne m'as pas toujours fais la meilleure impression au niveau java, du moins ds tes 1er posts... :D
 

el_gringo a écrit a écrit :

 
Ouais, protomatter il s'utilise de manière transparente


:jap:
 

el_gringo a écrit a écrit :

 
, c ce que j'essayais de te faire comprendre en te disant que un pool sous la forme d'un driver JDBC...:D


comme il me provoque!!!  [:biscuiteur]


Message édité par --greg-- le 05-08-2002 à 17:48:47
Reply

Marsh Posté le 05-08-2002 à 17:55:44    

--greg-- a écrit a écrit :

disons que tu ne m'as pas toujours fais la meilleure impression au niveau java, du moins ds tes 1er posts... :D
 
 :jap:
 comme il me provoque!!!  [:biscuiteur]




 
hé oui, g appris (et j'apprend encore) le Java sans cours, sans livre, juste avec le forum et en me balladant sur qqs sites.
Du coup ça a pu m'ariver (et ça peut encore m'arriver) de poser des questions dont la réponse te parait évidente.
Si c le cas, tant mieux, tu pourras m'aider rapidement.
 
Non, parce que, là par contre, franchement, t'as pas fait fort quand même ! l'idée du pool de connection, t'aurais pu la trouver tout seul ! (non mais franchement, bon Dieu, c vrai quoi ! :D)
 
 
 
...c chiant hein !?:D
 
Allez, j'arrête de te faire chier, ms essaye de penser à ça la prochaine fois que t'auras envie de m'incendier pr une question que g posée qui te plais pas ! :hello:


Message édité par El_gringo le 05-08-2002 à 17:56:02
Reply

Marsh Posté le 05-08-2002 à 18:16:33    

:D
 
nan mais à la base, la question que je posais, ct de savoir quelles pourraient etre les consequences d'une non fermeture de statement et ou de connections alors  :fuck:  
 
 :lol:  
 
 
et au fait, euh franchement, lis des bouquins, t'apprend +vite et +mieux que sur le net (crois moi, pas eu de cours non plus)

Reply

Marsh Posté le 05-08-2002 à 21:40:05    

Ne te méprends pas sur --greg--
 
C'est un gars qui en a ds la tête. le truc c'est qu'il ne fait pas du Java depuis longtemps c'est tout. Ca vient avec le temps ce genre de choses


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-08-2002 à 21:40:43    

DarkLord a écrit a écrit :

Ne te méprends pas sur --greg--
 
C'est un gars qui en a ds la tête. le truc c'est qu'il ne fait pas du Java depuis longtemps c'est tout. Ca vient avec le temps ce genre de choses



:heink:

Reply

Marsh Posté le 05-08-2002 à 21:41:00    

quoi t'es pas content ?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-08-2002 à 21:41:25    

DarkLord a écrit a écrit :

quoi t'es pas content ?



:kaola:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed