Thread: Array of compound not supported?

Array of compound not supported?

From
RW Shore
Date:
I have a compound type defined as

CREATE TYPE typedef.DECLASS_REASON_ENTRY AS (
        ENTRY_REASON VARCHAR(80),
        AUTHORIZING_USER VARCHAR(20)
)

and a table defined as

create table table102 (field1 typedef.declass_reason_entry[] )

The following statement works:

insert into table102(field1) values ('{"(\\"abcdef\\",\\"ghijkl\\")","(\\"abcdef\\",\\"ghijkl\\")"}')

Consider the following prepared statement:

insert into table102 (field1) values (?)

If I use setString() on this prepared statement, execution throws a variant of illegal type (complains about the parameter being a char varying when it wants something else). If I use setObject() and pass it a java.sql.Array implementation that wraps this same string, I get a malformed array literal error.Note that the same code works fine with arrays of all the built-in types, including point. No matter what I do, I can't insert into the array of compound from my app.

Anybody have any suggestions, or is array of compound simply not supported via a prepared statement?

Re: Array of compound not supported?

From
Lukas Eder
Date:
On Feb 20, 12:02 am, rws228@gmail.com (RW Shore) wrote:
> Anybody have any suggestions, or is array of compound simply not supported
> via a prepared statement?

Check out my question a couple of weeks earlier:
http://archives.postgresql.org/pgsql-jdbc/2011-02/msg00038.php

There wasn't any authoritative answer yet, so I'm curiously following
this thread


Re: Array of compound not supported?

From
Vitalii Tymchyshyn
Date:
Have you tried setObject(1, str, Types.OTHER); ?

20.02.11 01:02, RW Shore написав(ла):
> I have a compound type defined as
>
> CREATE TYPE typedef.DECLASS_REASON_ENTRY AS (
> ENTRY_REASON VARCHAR(80),
> AUTHORIZING_USER VARCHAR(20)
> )
>
> and a table defined as
>
> create table table102 (field1 typedef.declass_reason_entry[] )
>
> The following statement works:
>
> insert into table102(field1) values
> ('{"(\\"abcdef\\",\\"ghijkl\\")","(\\"abcdef\\",\\"ghijkl\\")"}')
>
> Consider the following prepared statement:
>
> insert into table102 (field1) values (?)
>
> If I use setString() on this prepared statement, execution throws a
> variant of illegal type (complains about the parameter being a char
> varying when it wants something else). If I use setObject() and pass
> it a java.sql.Array implementation that wraps this same string, I get
> a malformed array literal error.Note that the same code works fine
> with arrays of all the built-in types, including point. No matter what
> I do, I can't insert into the array of compound from my app.
>
> Anybody have any suggestions, or is array of compound simply not
> supported via a prepared statement?