Voil� un exemple de r�ponse, dont tout le monde ne peut pas profiter � cause
de mon probl�me de messagerie. D�sol� ;)!

Laurent For�t.
----- Original Message -----
From: "Dominique Gallot" <[EMAIL PROTECTED]>
To: "Laurent For�t" <[EMAIL PROTECTED]>
Sent: Friday, March 07, 2003 3:41 PM
Subject: Re: Resultset et close()


>
> Faire ceci
>
> ..........
>
>
> Simple non ? En tout cas c'est une tres bonne facon de faire, avec un
Proxy
> !
>
> Dominique
> -------------------------------------------- SAVE THIS TO Test.java
> ---------------------------
>
>
>
> import java.lang.reflect.*;
> import java.sql.*;
>
> public class Test
> {
>   static class ClosedResultSet implements InvocationHandler
>   {
>     private Object obj;
>     public boolean closed = false;
>     public ClosedResultSet (Object o )
>     {
>       obj = o;
>     }
>     public Object invoke(Object proxy, Method m, Object[] args) throws
> Throwable
>     {
>         Object result;
>         try {
>             result = m.invoke(obj, args);
>             if ( m.getName().equals("close") )
>             {
>                closed = true;
>             }
>         } catch (InvocationTargetException e) {
>             throw e.getTargetException();
>         }
>         return result;
>     }
>     public boolean isClosed()
>     {
>       return closed;
>     }
>
>   }
>
>   public static void maMethodQuiPeutFermer(ResultSet rs) throws
> SQLException
>   {
>     if ( rs.next() )
>       rs.close();
>   }
>
>   public static void main ( String[] args ) throws Exception
>   {
>     Statement stmt = null;
>     ResultSet rs =   stmt.executeQuery("select blalalala ");
>     ClosedResultSet crs = new ClosedResultSet (rs);
>     rs = ( ResultSet) java.lang.reflect.Proxy.newProxyInstance(
>                 rs.getClass().getClassLoader(),
>                 new Class[]{ResultSet.class}, crs );
>
>     maMethodQuiPeutFermer(rs);
>     if ( crs.isClosed() )
>     {
>       System.err.println("Oppps closed");
>     } else
>     {
>       rs.close();
>     }
>   }
> }
>
>
>
>
>
>                       Laurent For�t
<[EMAIL PROTECTED]        To:       <[EMAIL PROTECTED]>
>                       com>                     cc:       (bcc: Dominique
Gallot/BRU/MASTERCARD)
>                                                Subject:  Re: Resultset et
close()
>                       07/03/2003 12:14
>                       Please respond to
>                       Laurent For�t
>
>
>
>
>
> Tout a fait exact, comme je travaille toujours sur une m�me base, j'avais
> omis ce d�tail.
>
> Pour la m�thode isClosed(), ca serait trop simple;) !
>
> Peut �tre faire la remarque � JCP pour qu'il modifie l'API JDBC.
>
> Laurent For�t.
>
> ----- Original Message -----
> From: "Erik Mazoyer" <[EMAIL PROTECTED]>
> To: "Laurent For�t" <[EMAIL PROTECTED]>
> Sent: Friday, March 07, 2003 11:54 AM
> Subject: RE: Resultset et close()
>
>
> > > ...puis regarder l'�galit� du message, en clair.
> >
> > Le probl�me est que ce message est d�pendant de la base de donn�e.
> > Je peux tr�s bien recevoir :
> > "The Resulset is closed"
> > ou
> > "L'ensemble des r�sultats est d�j� ferm�".
> >
> > Une analyse g�n�rique me semble impossible.
> >
> > Bref, j'ai bien l'impression qu'il n'y a pas de solution.
> > Ce serait pourtant si simple une m�thode :
> > public boolean isClosed() throws SQLException
> >
> > Merci,
> >
> > --------------------------------------------------------------------
> > Erik Mazoyer, Chef de projet
> > HyperOffice
> > 6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
> > T�l. 01 41 96 96 76
> > Fax 01 41 96 96 77
> > M�l  [EMAIL PROTECTED]
> >
> >
> > -----Message d'origine-----
> > De : Laurent For�t [mailto:[EMAIL PROTECTED]
> > Envoy� : vendredi 7 mars 2003 11:48
> > � : [EMAIL PROTECTED]
> > Objet : Re: Resultset et close()
> >
> >
> > Un truc affreux mais qui doit marcher est de rep�rer le message qui est
> > renvoy� par l'exception dans le cas o� le rs est d�ja fermer.
> > puis regarder l'�galiter du message, en clair :
> >
> >  if(rs != null) {
> >  try {
> >      rs.close();
> >  } catch(SQLException sqlex) {
> >         if ( ! sqlEx.getMessage().equals("SQL already CLOSED)) {
> >             throw sqlEx;
> >         }
> >   }
> >
> > laurent Foret.
> >
> > ----- Original Message -----
> > From: "Erik Mazoyer" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Friday, March 07, 2003 11:33 AM
> > Subject: Resultset et close()
> >
> >
> > > J'ai une m�thode qui ouvre un java.sql.ResultSet sur une base de
> donn�e.
> > > Dans le finally de la m�thode, je referme le ResultSet (m�thode
> close()).
> > >
> > > ResultSet rs = null;
> > > try {
> > > ...
> > > rs = stmt.executeQuery(...);
> > > ...
> > > } finally {
> > > if(rs != null) {
> > > rs.close();
> > > }
> > > }
> > >
> > > Le probl�me est qu'au cours de la m�thode ce ResultSet peut �tre ferm�
> ou
> > non (la m�thode n'est pas en mesure de le savoir).
> > >
> > > Je n'ai pas trouv� de solution pour d�termin� si un ResultSet est
ferm�
> ou
> > non.
> > >
> > > Si je le ferme � nouveau le ResultSet dans le finally, une exception
> est
> > lev�e.
> > > Mais h�las elle est de type SQLException, ce qui n'est pas sp�cifique.
> > >
> > > Bref pour l'instant la seule solution trouv�e est de ne pas tenir
> compte
> > de l'exception lev�e par le close.
> > >
> > > } finally {
> > > if(rs != null) {
> > > try {
> > > rs.close();
> > > } catch(SQLException sqlex) {}
> > > }
> > > }
> > > Mais cela masque aussi toutes les autres raisons pour lesquelles le
> close
> > n'a pu avoir lieu, ce qui nuit au d�boguage.
> > >
> > > public void close()
> > >            throws SQLException
> > > ...
> > > Throws:
> > > SQLException - if a database access error occurs
> > >
> > > Bref, avez vous une solution � me proposer ?
> > >
> > > Merci,
> > >
> > > --------------------------------------------------------------------
> > > Erik Mazoyer, Chef de projet
> > > HyperOffice
> > > 6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
> > > T�l. 01 41 96 96 76
> > > Fax 01 41 96 96 77
> > > M�l  [EMAIL PROTECTED]
> > >
> >
> >
>
>
>
>
>
>
>
>
> **********************************************************************
> This email and any files transmitted with it are confidential and
> intended solely for the use of the individual or entity to whom they
> are addressed. If you have received this email in error please notify
> the system manager.
>
> This footnote also confirms that this email message has been swept by
> MIMEsweeper for the presence of computer viruses.
>
> www.mimesweeper.com
> **********************************************************************
>
>

Répondre à