Chapter 3, Tables and Trees
#24 Create a JDBC Table Model
H A C K
Create a JDBC Table Model
Bring your database tables into Swing with a minimum of hassle.
If you’ve worked with databases, you’ve probably also worked with the
tools they provide for quick table maintenance and queries: command-line
tools that are well suited to brief hack-and-slash work, but hard to work
with once you start dealing with any serious amount of data. It’s hard
enough to write the SQL command to return 10 or 20 columns in a query—
it’s even worse when the results word-wrap over the course of a dozen lines,
and you can’t tell where one result ends and another begins.
Wouldn’t it be nice to be able to throw the contents of any database table
into a Swing
JTable? Give it a few JDBC strings, toss it in a JFrame, and
If you’ve worked with both JDBC and Swing, you’ll grasp the concept in one
sentence: use table metadata to build a Swing
TableModel from the database
table. If you haven’t, here’s the background you’ll need: JDBC provides an
abstract means of accessing databases. Java code to work with one database
should work with another, the only difference is in the way that JDBC
Connection to the database, which is usually a matter of provid-
• A driver class, which provides implementations of the various
• A URL with which to connect to the database. This implies the use of
sockets, though that’s not necessarily the case. Some small embeddable
databases can live in the same JVM as your application.
• An optional username.
• An optional password.
Once you have the
Connection, you can begin to send commands (creation,
deletion, and altering of tables) or queries to the database by creating
Statements from the Connection. You can also use the Connection to get
metadata about the database, like what kinds of features it supports, how
long certain strings can be, etc. More importantly for this hack, it allows you
to discover what tables are in the database, what columns they have, and
what types of data are in those columns.
So, given just a
Connection and the name of a table in the database, you can
build a Java representation of its contents with two queries. The first query
gets column metadata for the table and builds up arrays of the column