Re: Update ResultSet

From: "Christian Rengstl" <Christian(dot)Rengstl(at)klinik(dot)uni-regensburg(dot)de>
To: "Heikki Linnakangas" <heikki(at)enterprisedb(dot)com>
Cc: <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: Update ResultSet
Date: 2007-10-10 12:57:47
Message-ID: 470CE8C9.90AD.0080.0@klinik.uni-regensburg.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

And I suppose there is no reasonable workaround, is there?

Christian Rengstl M.A.
Klinik und Poliklinik für Innere Medizin II
Kardiologie - Forschung
Universitätsklinikum Regensburg
B3 1.388
Franz-Josef-Strauss-Allee 11
93053 Regensburg
Tel.: +49-941-944-7230

>>> On Wed, Oct 10, 2007 at 2:53 PM, in message
<470CCB67(dot)80106(at)enterprisedb(dot)com>,
"Heikki Linnakangas" <heikki(at)enterprisedb(dot)com> wrote:
> Only simple result sets coming from a single table, with no joins,
are
> updateable. Granted, the error message is misleading. The driver has
to
> parse the query, to extract the name of the table to update or throw
an
> error if there's more than one table involved. In this case, it
doesn't
> understand the INNER JOIN, and therefore you get the misleading
error
> message instead of this: "ResultSet is not updateable. The query
that
> generated this result set must select only one table, and must
select
> all primary keys from that table. See the JDBC 2.1 API
Specification,
> section 5.6 for more details."
>
> Christian Rengstl wrote:
>> Hi everyone,
>>
>> I have a query including an inner join, which I execute to obtain a
>> ResultSet, but when I execute the following piece of code I get an
error
>> message saying that it could not update the table because it could
not
>> find the primary key for a table.
>> rs.first();
>> rs.updateString("gene", "TestGen");
>> rs.updateRow();
>>
>> Here is my query:
>> SELECT gene_entropy.gene, gene_entropy.entropy,
gene_entropy.iteration,
>> snp_entropy.snp_id
>> FROM clustering.gene_entropy INNER JOIN clustering.snp_entropy
>> USING(gene) limit 5;
>>
>> And here is the stacktrace:
>> org.postgresql.util.PSQLException: Für die Tebelle
>> (clustering.gene_entropy konnte kein Primärschlüssel gefunden
werden.
>> at
>>
>
org.postgresql.jdbc2.AbstractJdbc2ResultSet.isUpdateable(AbstractJdbc2ResultS
> et.java:1547)
>> at
>>
>
org.postgresql.jdbc2.AbstractJdbc2ResultSet.checkUpdateable(AbstractJdbc2Resu
> ltSet.java:2550)
>> at
>>
>
org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateValue(AbstractJdbc2ResultSe
> t.java:2796)
>> at
>>
>
org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateString(AbstractJdbc2ResultS
> et.java:1309)
>> at
>>
>
org.postgresql.jdbc2.AbstractJdbc2ResultSet.updateString(AbstractJdbc2ResultS
> et.java:1394)
>> at
>>
>
myapp.ui.event.DBTableFrameListener.actionPerformed(DBTableFrameListener.java
> :406)
>> at
>>
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
>> at
>>
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
>> at
>>
>
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:38
> 7)
>> at
>>
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
>> at
>>
>
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.
> java:236)
>> at
>>
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
>> at
java.awt.Component.processMouseEvent(Component.java:6038)
>> at
>> javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
>> at java.awt.Component.processEvent(Component.java:5803)
>> at java.awt.Container.processEvent(Container.java:2058)
>> at
java.awt.Component.dispatchEventImpl(Component.java:4410)
>> at
java.awt.Container.dispatchEventImpl(Container.java:2116)
>> at java.awt.Component.dispatchEvent(Component.java:4240)
>> at
>>
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
>> at
>>
java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
>> at
>> java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
>> at
java.awt.Container.dispatchEventImpl(Container.java:2102)
>> at java.awt.Window.dispatchEventImpl(Window.java:2429)
>> at java.awt.Component.dispatchEvent(Component.java:4240)
>> at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
>> at
>>
>
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:
> 273)
>> at
>>
>
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183
> )
>> at
>>
>
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:
> 173)
>> at
>>
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
>> at
>>
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
>> at
>> java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
>>
>> I am more than happy and thankful for any advice!
>
>
> --
> Heikki Linnakangas
> EnterpriseDB http://www.enterprisedb.com
>
> ---------------------------(end of
broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
> choose an index scan if your joining column's datatypes do
not
> match

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Heikki Linnakangas 2007-10-10 13:02:34 Re: Update ResultSet
Previous Message Heikki Linnakangas 2007-10-10 12:53:59 Re: Update ResultSet