You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ddlutils-user@db.apache.org by Vignesh Swaminathan <vs...@cordys.com> on 2006/02/16 13:21:56 UTC

Update sql error in PostgreSQL 8.1

Hi,

Tried update this time and had an exception thrown, the code is

iter = testData.query("select * from orders", new ArrayList());
while(iter.hasNext())
{
   order = (DynaBean)iter.next();
 
   System.out.println(order.get("id"));
   System.out.println(order.get("shipdate"));
}

DynaBean bean = testData.getDynaBean("orders");
bean.set("id", order.get("id"));
bean.set("customerid", new Integer(2312));
bean.set("orderdate", order.get("orderdate"));
bean.set("shipdate", order.get("shipdate"));
System.out.println(platform.getUpdateSql(dbModel, (SqlDynaBean) bean));
platform.update(dbModel, bean);

The exception is


org.apache.ddlutils.DynaSqlException: Error while updating in the
database
	at
org.apache.ddlutils.platform.PlatformImplBase.update(PlatformImplBase.ja
va:1352)
	at
org.apache.ddlutils.platform.PlatformImplBase.update(PlatformImplBase.ja
va:1369)
	at TestData.updateData(TestData.java:73)
	at TestData.main(TestData.java:151)
Caused by: org.postgresql.util.PSQLException: The column index is out of
range: 4, number of columns: 3.
	at
org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java
:57)
	at
org.postgresql.core.v3.SimpleParameterList.setLiteralParameter(SimplePar
ameterList.java:101)
	at
org.postgresql.jdbc2.AbstractJdbc2Statement.bindLiteral(AbstractJdbc2Sta
tement.java:2066)
	at
org.postgresql.jdbc2.AbstractJdbc2Statement.setInt(AbstractJdbc2Statemen
t.java:1114)
	at
org.apache.ddlutils.platform.PlatformImplBase.setObject(PlatformImplBase
.java:1682)
	at
org.apache.ddlutils.platform.postgresql.PostgreSqlPlatform.setObject(Pos
tgreSqlPlatform.java:237)
	at
org.apache.ddlutils.platform.PlatformImplBase.update(PlatformImplBase.ja
va:1338)
	... 3 more

The SQL generated from getUpdateSql is 

UPDATE "orders" SET "customerid" = '1000', "orderdate" = '2006-03-16
00:00:00.0', "shipdate" = '2006-04-21 00:00:00.0' WHERE

As you can see the statement is not completed. Debugged to find that the
method createUpdateSql in PlatformImplBase sends only the non primary
key properties to method getUpdateSql in SQLBuilder class. This causes
the WHERE statement to be empty as an if check fails at

if (column.isPrimaryKey() && columnValues.containsKey(column.getName()))

As the primary key column is not in the columnValues Map, leaving an
empty WHERE clause string.



<vignesh/>
"Winning solutions find the right balance between market needs and
technical needs"


***************************************************************************************************
The information in this message is confidential and may be legally  privileged. 
It is intended solely for the addressee. Access to this message by anyone else is 
unauthorized. If you are not the intended recipient, any disclosure, copying, or 
distribution of the message, or any action or omission taken by you in reliance 
on it is prohibited and may be unlawful. Please immediately contact the sender if 
you have received this message in error. This email does not constitute any 
commitment  from Cordys Holding BV or any of its subsidiaries except when 
expressly agreed in a written agreement between the intended recipient and 
Cordys Holding BV or its subsidiaries.
 ***************************************************************************************************


Re: Update sql error in PostgreSQL 8.1

Posted by Thomas Dudziak <to...@gmail.com>.
On 2/16/06, Vignesh Swaminathan <vs...@cordys.com> wrote:

> Tried update this time and had an exception thrown, the code is
>
> iter = testData.query("select * from orders", new ArrayList());
> while(iter.hasNext())
> {
>    order = (DynaBean)iter.next();
>
>    System.out.println(order.get("id"));
>    System.out.println(order.get("shipdate"));
> }
>
> DynaBean bean = testData.getDynaBean("orders");
> bean.set("id", order.get("id"));
> bean.set("customerid", new Integer(2312));
> bean.set("orderdate", order.get("orderdate"));
> bean.set("shipdate", order.get("shipdate"));
> System.out.println(platform.getUpdateSql(dbModel, (SqlDynaBean) bean));
> platform.update(dbModel, bean);
>
> The exception is
>
> org.apache.ddlutils.DynaSqlException: Error while updating in the
> database
>         at
> org.apache.ddlutils.platform.PlatformImplBase.update(PlatformImplBase.ja
> va:1352)
>         at
> org.apache.ddlutils.platform.PlatformImplBase.update(PlatformImplBase.ja
> va:1369)
>         at TestData.updateData(TestData.java:73)
>         at TestData.main(TestData.java:151)
> Caused by: org.postgresql.util.PSQLException: The column index is out of
> range: 4, number of columns: 3.
>         at
> org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java
> :57)
>         at
> org.postgresql.core.v3.SimpleParameterList.setLiteralParameter(SimplePar
> ameterList.java:101)
>         at
> org.postgresql.jdbc2.AbstractJdbc2Statement.bindLiteral(AbstractJdbc2Sta
> tement.java:2066)
>         at
> org.postgresql.jdbc2.AbstractJdbc2Statement.setInt(AbstractJdbc2Statemen
> t.java:1114)
>         at
> org.apache.ddlutils.platform.PlatformImplBase.setObject(PlatformImplBase
> .java:1682)
>         at
> org.apache.ddlutils.platform.postgresql.PostgreSqlPlatform.setObject(Pos
> tgreSqlPlatform.java:237)
>         at
> org.apache.ddlutils.platform.PlatformImplBase.update(PlatformImplBase.ja
> va:1338)
>         ... 3 more
>
> The SQL generated from getUpdateSql is
>
> UPDATE "orders" SET "customerid" = '1000', "orderdate" = '2006-03-16
> 00:00:00.0', "shipdate" = '2006-04-21 00:00:00.0' WHERE
>
> As you can see the statement is not completed. Debugged to find that the
> method createUpdateSql in PlatformImplBase sends only the non primary
> key properties to method getUpdateSql in SQLBuilder class. This causes
> the WHERE statement to be empty as an if check fails at
>
> if (column.isPrimaryKey() && columnValues.containsKey(column.getName()))
>
> As the primary key column is not in the columnValues Map, leaving an
> empty WHERE clause string.

Could you file an issue for this ?

Tom