Обсуждение: AJ1Stmt.setObject()

Поиск
Список
Период
Сортировка

AJ1Stmt.setObject()

От
Brian Olson
Дата:
I think AbstractJdbc1Statement.setObject(int,Object) needs to know how
to handle Java array types.
Last month someone mentioned the desire for using binary protocols and
I agree. Until then, I'd guess that
setObject( new int[]{1,2,3} )
should do
setString( "{1,2,3}" )

And so on for the other Java primitive types and String. I suppose for
Object[] one would get
"{" + x[0].toString() + "," + x[1].toString() ... "}"
That would match the current setObject behavior of defaulting to the
toString() value.

My problem is that I don't see any other way in jdbc to set array
elements of rows. So, this must be it, though unimplemented here.

I could probably whip this up in a couple hours. I'm looking for feed
back on whether it's the right thing to do.

Brian Olson
http://bolson.org/


Re: AJ1Stmt.setObject()

От
Oliver Jowett
Дата:
Brian Olson wrote:
> I think AbstractJdbc1Statement.setObject(int,Object) needs to know how
> to handle Java array types.

How do you specify how to interpret the elements of the array? e.g. how
should this be handled? :

  Object[] awkwardArray = new Object[] { new Integer(42), "42", "foo" };
  statement.setObject(1, awkwardArray);

> My problem is that I don't see any other way in jdbc to set array
> elements of rows. So, this must be it, though unimplemented here.

JDBC2's PreparedStatement.setArray() is the standard way: you wrap the
underlying array in an appropriate Array implementation of your own.
This also solves the problem of deciding how to interpret the array
elements: the Array interface allows you to explicitly provide a SQL
type for the elements.

However the CVS driver does not implement setArray usefully for this
case. I have an unapplied patch that was posted to the list some time
ago that implements this (getting quite old now..), which is a bit of a
nasty hack but does the job. See
http://archives.postgresql.org/pgsql-jdbc/2003-07/msg00294.php

-O