ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From beppes <superbe...@gmail.com>
Subject Update Postgres Array with IBatis
Date Tue, 07 Apr 2009 08:52:25 GMT

Hi to everybody. I'm new to this forum.

I need to update an array of integers in Postgres with Ibatis 2.3.4 (and
Spring). I want to execute the following query:
UPDATE data SET='{1,2}' WHERE dataid=10

The query is

    <update id="updateQuery" parameterClass="java.util.Map">
        UPDATE data
          <dynamic prepend="SET arrayData =" >
	        <iterate property="arrayData" open="'{" close="}'" conjunction=",">
	             #arrayData[]#
	        </iterate>
          </dynamic>        
        WHERE dataid=#dataId#
    </update>

The method realized

    public void updateData(int dataId, MyData mydata) {
        Map<String, Object> params = new HashMap<String, Object>();
        List<Integer> arrayData = mydata.getIntegerArray();
        params.put("dataId", dataId);
        params.put("arrayData", arrayData);
        this.getSqlMapClientTemplate().update("updateQuery", params);
    }

Executing the query I get the following response (arrayData contains 2
values):

Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred while applying a parameter map.  
--- Check the updateData-InlineParameterMap.  
--- Check the parameter mapping for the 'arrayData[1]' property.  
--- Cause: org.postgresql.util.PSQLException: The column index is out of
range: 2, number of columns: 1 at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.jav2009-04-07
10:27:26,727 DEBUG [java.sql.Connection] - {conn-100043} Connection
2009-04-07 10:27:26,729 DEBUG [java.sql.Connection] - {conn-100043}
Preparing Statement:          UPDATE data         SET arrayData =         
'{               ?          ,               ?          }'    WHERE dataId=?
a:107)
	at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:457)
	at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
	at
org.springframework.orm.ibatis.SqlMapClientTemplate$10.doInSqlMapClient(SqlMapClientTemplate.java:413)
	at
org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:209)
	... 43 more
Caused by: org.postgresql.util.PSQLException: Indice di colonna, 2, รจ
maggiore del numero di colonne 1.
	at
org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:52)
	at
org.postgresql.core.v3.SimpleParameterList.setLiteralParameter(SimpleParameterList.java:113)
	at
org.postgresql.jdbc2.AbstractJdbc2Statement.bindLiteral(AbstractJdbc2Statement.java:2108)
	at
org.postgresql.jdbc2.AbstractJdbc2Statement.setInt(AbstractJdbc2Statement.java:1151)
	at
org.apache.commons.dbcp.DelegatingPreparedStatement.setInt(DelegatingPreparedStatement.java:117)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at
com.ibatis.common.jdbc.logging.PreparedStatementLogProxy.invoke(PreparedStatementLogProxy.java:70)
	at $Proxy9.setInt(Unknown Source)
	at
com.ibatis.sqlmap.engine.type.IntegerTypeHandler.setParameter(IntegerTypeHandler.java:30)
	at
com.ibatis.sqlmap.engine.type.UnknownTypeHandler.setParameter(UnknownTypeHandler.java:69)
	at
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.setParameter(ParameterMap.java:166)
	at
com.ibatis.sqlmap.engine.mapping.parameter.ParameterMap.setParameters(ParameterMap.java:126)
	at
com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:78)
	at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
	at
com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
	... 47 more

I've also tried the same query with this variant

public void updateData(int dataId, MyData mydata) {
        Map<String, Object> params = new HashMap<String, Object>();
        int[] arrayData = mydata.getIntArray();
        params.put("dataId", dataId);
        params.put("arrayData", arrayData);
        this.getSqlMapClientTemplate().update("updateQuery", params);
    }

With the same result. Could someone suggest me a solution?

-- 
View this message in context: http://www.nabble.com/Update-Postgres-Array-with-IBatis-tp22924852p22924852.html
Sent from the iBATIS - User - Java mailing list archive at Nabble.com.


Mime
View raw message