Solved, and a bug found! Re: JDBC question: Creating new arrays

From: Joe Tomcat <tomcat(at)mobile(dot)mp>
To: Doug McNaught <doug(at)mcnaught(dot)org>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Solved, and a bug found! Re: JDBC question: Creating new arrays
Date: 2002-11-14 02:10:05
Message-ID: 1037239808.1318.466.camel@linux
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tue, 2002-11-12 at 17:39, Doug McNaught wrote:
> Then you probably need to wrap your Java array in an object that
> implements java.sql.Array so that the JDBC driver can talk to it.
> Shouldn't be hard.

That still doesn't make it driver-independent, does it?

Anyway, I found a simple solution that works easily with Postgres: The
way PreparedStatement.setArray(Array) works is that it actually gets
translated to PreparedStatement.setString(Array.toString()). The
Array.toString() method is very simple; it just makes a string that
looks like '{484,282,945}' (for an int[]) so I just turned my int[] into
such a string, and called PreparedStatement.setString(). This is a bit
of a hack, but it seems that there is no db-independent way to do this,
so I have no other options. If we need to move to some other db, this
shouldn't be hard to modify as needed.

There is one other problem, though: If I have an array with no
elements, then this operation:

Array array = resultSet.getArray(3);
Object o = array.getArray();

throws a Bad Integer exception. This seems like it must be a bug in the
JDBC. To get around it, I put the o = array.getArray() inside a try
block, and if throws an exception, I know that the array is
zero-length. This is clunky and it violates the principle of "Only use
exceptions for exceptional conditions" and probably has some performance
problems. It seems that array.getArray() should always be able to
return properly because that should be a class invariant.

Any suggestions on this?

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Gavin M. Roy 2002-11-14 02:19:10 Re: 1600 Column limit..
Previous Message Brian Hirt 2002-11-14 01:52:51 Re: 1600 Column limit..