Обсуждение: Array of compound not supported?
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?
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?
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
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?