Found this really cool Java database api at http://www.eazydb.com

EasyDB is a unique API which provides a way of building web based database
applications. There are two primary ways of providing this functionality,
each of which has pros and cons.
A two-tier architecture consists of a client tier and a database tier. This
type of architecture most often leads to very large client side code. This
is not a problem if the client is a stand-alone application. However, this
presents some very serious performance issues when the client is a web based
applet. The sheer size of the applet with all the normal database support
libraries makes this approach very undesirable from a users point of view.
They must wait for the entire applet to download to their machine before
they can began to use it. Even though the two-tier approach is somewhat
easy to use, it does not provide the flexibility needed for a light weight
web based database application. Furthermore, the data being sent back to
the client could consist of very large result sets which will also tend to
frustrate the user if it takes an unusual amout of time.

A three-tier architecture is similar to the two-tier architecture, except
that it includes a module that sits between the client and the database.
This module, or middle tier of this type of architecture, acts as a "middleman"
in the database communications between the client and the database. This
approach is by the far the most flexible and is the core concept of EasyDB.
By having a middle man in our design we can offload all the database access
to a java servlet or ASP script. This makes our client smaller. In fact,
the EasyDB client side API adds just over 20k to the overall size of the
applet! That's almost as impressive as the built-in on-the-fly data compression
capability of EasyDB. The built in compression can achieve performance gains
up to 4 times faster than what it takes to receive data from the remote database
server without compression.