commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Henri Yandell <bay...@generationjava.com>
Subject Re: [DBUtils][patch] executeQuery method
Date Thu, 21 Nov 2002 23:53:40 GMT

What do you recommend on initial capacity. On reflection I'm not sure on
my +1 as anyone using this method for LARGE result sets should not be
using it [memory etc].

I'm going to rollout the usual argument. If I use an Iterator then I can
choose whether to load easily. I can also implement an extension far
easier as List is a large and heavy API.

In this case, due to the nature of closing the ResultSet underneath, it is
unlikely the Iterators chief promise of lazy loading can be fulfilled,
though PagingIterator which extends Iterator and adds a close() method
[which must be called] could be implemented. [not saying it should, it has
issues].

However, I think DbUtils as a class should provide a common API. That
common API should have common ins and outs and Iterator is more generic
than a particular List, Map or Set. It might be that there are obvious
performance reasons to choose a particular return format, like List,
SynchronisedList or Map, but I don't think that should happen often.

On the minus side for Iterators, they imply an open-ness, that we have
some kind of resource cursor [not db, just language] linking to some
structure that someone else might own. In many cases returning a structure
rather than a view [like Iterator] makes sense then because we want to
deal in discrete operations, but this code replaces code that currently
uses the ResultSet.next pattern, so I don't think that -ve for Iterators
applies here.

Things that might make sense though:

1) ListIterator and not Iterator. We have a List, why not use it, as you
said.

2) Knowing the size. This does make List tempting.

My tuppence.

Hen

On Thu, 21 Nov 2002, Jeff Varszegi wrote:

> Iterator is the worst thing that ever happened to the Collections API
> (because of its omnipresence, not its presence).  I think it's way
> overused because people have talked too much about how it's a simple
> generic abstraction.  The fact is, it's very often the case in use of
> a data structure that you want to get the elements in a less
> restrictive way than Iterator provides.

>  When was the last time you called a HashMap's keySet().iterator()
> method in order to find the thing you were looking for?  Why do
> ArrayLists exist in the first place?  Iterators suck in a lot of
> respects, because you have to create a new object for every pass over
> some data that's already wrapped up in (usually a lot of) objects, and
> you incur extra performance penalty for every all those method calls.
> This stuff really adds up.
>
> I would try to avoid any but forward-only or backward-only reads in my
> own database programming, but it's sometimes necessary to look at a
> value previously returned from a ResultSet.  The best schemes don't
> rely on the result set itself, but cache stuff that will be needed
> later.  The way the method is implemented, EVERYTHING is cached in
> memory already, and the fact that you get an Iterator back doesn't
> change that, it only restricts your ability to index into the data.
> You also lose the ability right off the bat to know how many rows were
> returned, even though everything is sitting right in memory.
>
> Jeff
>
> --- Henri Yandell <bayard@generationjava.com> wrote:
> >
> > initial capacity, +1.
> >
> > Iterator will need arguing. I don't believe people need to get collections
> > back from an API, they need the lowest common denominator and my view is
> > that this is an iterator.
> >
> > It's something that always starts arguments though :)
> >
> > Hen
> >
> > On Thu, 21 Nov 2002, Jeff Varszegi wrote:
> >
> > > Looks okay, except I think you should make the initial capacity of the ArrayList
bigger
> > perhaps.
> > > I don't know.  Also, I would way rather have the ArrayList for my database-lookup
trouble than
> > > some ListIterator that I can only use once.
> > >
> > > My 1.5 cents,
> > >
> > > Jeff
> > >
> > > --- Eric Alexander <eric.alexander@genscape.com> wrote:
> > > > Here's a patch to DBUtils that adds an executeQuery method:
> > > >
> > > > public static Iterator executeQuery(Connection connection, String query,
> > > > Object[] vals) throws SQLException
> > > >
> > > > If null is found in the Object[], it will get passed to the driver. There's
> > > > probably something better we can do with it, but it's a start.
> > > >
> > > >
> > >
> > > > ATTACHMENT part 2 application/octet-stream name=DbUtils.patch
> > > > --
> > > > To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> > > > For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>
> > >
> > >
> > > __________________________________________________
> > > Do you Yahoo!?
> > > Yahoo! Mail Plus  Powerful. Affordable. Sign up now.
> > > http://mailplus.yahoo.com
> > >
> > > --
> > > To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> > > For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>
> > >
> > >
> >
> >
> > --
> > To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> > For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>
> >
>
>
> __________________________________________________
> Do you Yahoo!?
> Yahoo! Mail Plus  Powerful. Affordable. Sign up now.
> http://mailplus.yahoo.com
>
> --
> To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>
>
>


--
To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>


Mime
View raw message