> The only real difference between your code and mine is you have an
> outer-most try block that catches a general Exception (possibly
> NullPointerException)...  your code is no more impervious to null-pointers
> than mine, because:
>
>         Connection con = null;
>         con = ds.getConnection();
>
> and
>         Connection con = ds.getConnection();
>
> is exactly the same thing!  (And like you correctly noted, I did
> the former
> to avoid the annoying varible-scope problem.)

Except the above should cause an Exception rather then return a null
pointer.

>
> Both ways of implementation will give one the same results;  it's
> just up to
> the individual developer to determine if a SQL resource errors should be
> caught by an outer-most try block and handled explicitly, or implicitly
> ignored (close resource only if not null).
>
> And a minor note, you will need yet a third nested try-finally
> block in your
> code to close your ResultSet...

Actually I do not.  See the JDBC 1.1 and 2.0 spec which denote that closing
the Statement object implicitly closes the ResultSet object.

> Hence one can argue that my code is
> "prettier" ;-) even if it requires 3 explicit conditional
> checkers.  I think
> the best (prettiest and most optimized) pattern would be a combination of
> both of our implementations:
>
> try
> {
>         Connection con = null;
>         Statement stmt = null;
>         ResultSet result = null;
>         try
>         {
>                 ...
>         }
>         finally
>         {
>                 con.close();
>                 stmt.close();
>                 result.close();
>         }
> }
> catch(Exception e)
> {
>         ... handle possible NullPointerException as well as other
> exceptions
> }
>
> This pattern has only 2 try blocks (one nested in another) and no explicit
> null checkers!

True!  But I still wouldnt define them equal to null pointers :)  To each
our own.

Dave Wolf
Internet Applications Division
Sybase

>
> Gene
>
> -----Original Message-----
> From: A mailing list for Enterprise JavaBeans development
> [mailto:[EMAIL PROTECTED]]On Behalf Of Dave Wolf
> Sent: Wednesday, September 13, 2000 11:23 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Cursors Open problem with multiple insertions
>
>
> Gene,
>
> Let me share another design pattern or "template" for working with JDBC I
> much prefer.
>
> I have great concerns with designs like this where you "prototype" members
> as null pointers just to get around the compiler's scoping issue with a
> finally clause.  Basically the compiler is telling you that your member is
> out of scope in the finally that you declared in the try and is hence not
> definately assinged.  Many people get around this by setting the member to
> null.  My problem is you have introduced a null pointer right into your
> code.  Now to work around the danger of your null pointer, you have to add
> conditional logic to prevent accidentally touching this null pointer.
> Dangerous and error prone in my opinion.
>
> I would instead use a design like the below.  It still uses a
> finally block,
> has no chance of an object not being definately assigned, and, has no
> intrinsic null pointers.
>
> Connection con;
> PreparedStatement pstmt;
>
> try
> {
>         Context ctx =  getInitialContext();
>         DataSource ds = (DataSource) ctx.lookup(CACHE_NAME);
>         con = ds.getConnection();
>         try
>         {
>                 pstmt = con.prepareStatement("SELECT id, balance FROM
> account WHERE id
> =?");
>                 pstmt.setInt(1, _id);
>                 try
>                 {
>                         ResultSet rs = pstmt.executeQuery();
>                         rs.next();
>                         _id = rs.getInt(1);
>                         _balance = rs.getFloat(2);
>                 }
>                 finally
>                 {
>                         pstmt.close();
>                 }
>         }
>         finally
>         {
>                 con.close();
>         }
> }
> catch(Exception e)
> {
>         e.printStackTrace();
>         throw new java.rmi.RemoteException();
> }
>
> The finallys although not all at the end, do indeed fire last (as per
> Goslings spec), and I now dont need null pointers.
>
> Whatcha think?
>
> Dave Wolf
> Internet Applications Division
> Sybase
>
>
>
> > -----Original Message-----
> > From: A mailing list for Enterprise JavaBeans development
> > [mailto:[EMAIL PROTECTED]]On Behalf Of Gene Chuang
> > Sent: Wednesday, September 13, 2000 1:50 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: Cursors Open problem with multiple insertions
> >
> >
> > Good call Ana; and the following "template" is how you should
> > implement all
> > your jdbc calls:
> >
> >
> > Connection conn                 = null;
> > PreparedStatement stmt  = null;
> > ResultSet results               = null;
> > try
> > {
> >         conn = dataSource.getConnection();
> >         stmt = conn.getPreparedStatement();
> >         results = stmt.execute();
> > }
> > catch(SQLException se)
> > {
> > }
> > finally
> > {
> >         if(results !=null) results.close();
> >         if(stmt !=null) stmt.close();
> >         if(conn !=null) conn.close();
> > }
> >
> > Gene Chuang
> > Teach the world...  Join Kiko!
> > <http://www.kiko.com/profile/join.jsp?refcode=TAF-gchuang>
> >
> > -----Original Message-----
> > From: A mailing list for Enterprise JavaBeans development
> > [mailto:[EMAIL PROTECTED]]On Behalf Of Bhattacharyya, Ana
> > Sent: Wednesday, September 13, 2000 9:20 AM
> > To: [EMAIL PROTECTED]
> > Subject: Re: Cursors Open problem with multiple insertions
> >
> >
> > well this can happen if u are not closing ur ResultSet or
> > statement objects.
> > Do close them in the finally block of ur code.
> > HTH
> > Ana
> >
> > -----Original Message-----
> > From: Purushotham Das K [mailto:[EMAIL PROTECTED]]
> > Sent: Wednesday, September 13, 2000 12:08 PM
> > To: [EMAIL PROTECTED]
> > Subject: Cursors Open problem with multiple insertions
> >
> >
> > Hi Folks
> >
> >         I am getting the folllowing error ----> " Maximum Number
> > of Cursors
> > Opened"
> >         I have written a session bean that is accessing an entity
> > bean. Iam
> > working on weblogic 5.1 on solaris server.
> >         When I insert 13 or more rows into a table in a single call to
> > session bean, I get the above error. Everything's fine when I try
> > to insert
> > less number of records
> >          Can somebody enlighten me on this error?
> >
> >   Thanks in advance
> >    Purush
> >
> > ==================================================================
> > =========
> > To unsubscribe, send email to [EMAIL PROTECTED] and include
> > in the body
> > of the message "signoff EJB-INTEREST".  For general help, send email to
> > [EMAIL PROTECTED] and include in the body of the message "help".
> >
> >
> > STATEMENT OF CONFIDENTIALITY.   The information contained in this
> > electronic
> > message and any attachments to this message are intended for
> the exclusive
> > use of the addressee(s) and may contain confidential or privileged
> > information. If you are not the intended recipient, please notify
> > USPowerSolutions Corporation immediately at (617) 547-3800, or at
> > [EMAIL PROTECTED], and destroy all copies of this message and any
> > attachments.
> >
> > ==================================================================
> > =========
> > To unsubscribe, send email to [EMAIL PROTECTED] and include
> > in the body
> > of the message "signoff EJB-INTEREST".  For general help, send email to
> > [EMAIL PROTECTED] and include in the body of the message "help".
> >
> > ==================================================================
> > =========
> > To unsubscribe, send email to [EMAIL PROTECTED] and include
> > in the body
> > of the message "signoff EJB-INTEREST".  For general help, send email to
> > [EMAIL PROTECTED] and include in the body of the message "help".
> >
> >
>
> ==================================================================
> =========
> To unsubscribe, send email to [EMAIL PROTECTED] and include
> in the body
> of the message "signoff EJB-INTEREST".  For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".
>
> ==================================================================
> =========
> To unsubscribe, send email to [EMAIL PROTECTED] and include
> in the body
> of the message "signoff EJB-INTEREST".  For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".
>
>

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to