You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by "Krenek, Robert" <Ro...@emc.com> on 2008/01/22 16:45:54 UTC

Substitution Error on Insert?

Hi All,

I'm running into an issue that I cannot resolve.  If you can provide any assistance, your help would be much appreciated.

The environment consists of Ibatis, along with Apache and Tomcat on Linux connecting to a DB2 database on an as400.

Insert statements that once worked, are suddenly failing with the following error:


java.sql.SQLException: The number of parameter values set or registered does not match the number of parameters.

        com.ibm.as400.access.JDError.throwSQLException(JDError.java:360)

        com.ibm.as400.access.AS400JDBCPreparedStatement.commonExecuteBefore(AS400JDBCPreparedStatement.java:464)

        com.ibm.as400.access.AS400JDBCStatement.commonExecute(AS400JDBCStatement.java:631)

        com.ibm.as400.access.AS400JDBCPreparedStatement.execute(AS400JDBCPreparedStatement.java:726)

        com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:81)

        com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteUpdate(GeneralStatement.java:200)

        com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:78)

        com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:505)

        com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)

        com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:67)

        net.diginc.digicon.dao.HomeOfficeAdminDAO.updateContractStatus(HomeOfficeAdminDAO.java:172)

        net.diginc.digicon.services.HomeOfficeAdminService.abandonContract(HomeOfficeAdminService.java:359)

        org.apache.jsp.ProcessAbandonContract_jsp._jspService(ProcessAbandonContract_jsp.java:65)

        org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)

        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

        org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)

        org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)

        org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)

        javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


Here is the DAO insert code:

public void updateContractStatus( String contractId, ContractStatus contractStatus ) throws Exception
      {
            SqlMapClient sqlMap = FdlicSqlConfiguration.getSqlMapInstance();
            HashMap<String,Object> parameters = new HashMap<String, Object>();
            parameters.put("contractStatusCode", contractStatus.getCode() );
            parameters.put("contractId", contractId );
            sqlMap.update("updateContractStatus", parameters );
      }


Here is the map from the sqlmap:

<parameterMap id="update" class="java.util.Map">
   <parameter property="contractStatusCode"  jdbcType="INTEGER"/>
   <parameter property="contractId"  jdbcType="VARCHAR"/>
</parameterMap>

<update id="updateContractStatus" parameterMap="update">
   update digicon.contract set contractStatusCode = ? where contractId = ?
</update>


It appears to me as though the "?" are not being substituted. Any thoughts would be greatly appreciated.

Best Regards,
Robert Krenek





Re: Substitution Error on Insert?

Posted by Stephen Boyd <sw...@gmail.com>.
Can you turn on logging for java.sql?  Then you can see more of what ibatis
is doing with the prepared statement and its parameters.

On Jan 22, 2008 10:45 AM, Krenek, Robert <Ro...@emc.com> wrote:

>  Hi All,
>
>
>
> I'm running into an issue that I cannot resolve.  If you can provide any
> assistance, your help would be much appreciated.
>
>
>
> The environment consists of Ibatis, along with Apache and Tomcat on Linux
> connecting to a DB2 database on an as400.
>
>
>
> Insert statements that once worked, are suddenly failing with the
> following error:
>
>
>
> java.sql.SQLException: The number of parameter values set or registered does not match the number of parameters.
>
>         com.ibm.as400.access.JDError.throwSQLException(JDError.java:360)
>
>         com.ibm.as400.access.AS400JDBCPreparedStatement.commonExecuteBefore(AS400JDBCPreparedStatement.java:464)
>
>         com.ibm.as400.access.AS400JDBCStatement.commonExecute(AS400JDBCStatement.java:631)
>
>         com.ibm.as400.access.AS400JDBCPreparedStatement.execute(AS400JDBCPreparedStatement.java:726)
>
>         com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:81)
>
>         com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteUpdate(GeneralStatement.java:200)
>
>         com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:78)
>
>         com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:505)
>
>         com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
>
>         com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:67)
>
>         net.diginc.digicon.dao.HomeOfficeAdminDAO.updateContractStatus(HomeOfficeAdminDAO.java:172)
>
>         net.diginc.digicon.services.HomeOfficeAdminService.abandonContract(HomeOfficeAdminService.java:359)
>
>         org.apache.jsp.ProcessAbandonContract_jsp._jspService(ProcessAbandonContract_jsp.java:65)
>
>         org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
>
>         javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>
>         org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
>
>         org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
>
>         org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
>
>         javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>
>
>
>
>
> Here is the DAO insert code:
>
>
>
> *public* *void* updateContractStatus( String contractId, ContractStatus
> contractStatus ) *throws* Exception
>
>       {
>
>             SqlMapClient sqlMap = FdlicSqlConfiguration.*getSqlMapInstance
> *();
>
>             HashMap<String,Object> parameters = *new* HashMap<String,
> Object>();
>
>             parameters.put("contractStatusCode", contractStatus.getCode()
> );
>
>             parameters.put("contractId", contractId );
>
>             sqlMap.update("updateContractStatus", parameters );
>
>       }
>
>
>
>
>
> Here is the map from the sqlmap:
>
>
>
> <parameterMap id="update" class="java.util.Map">
>
>    <parameter property="contractStatusCode"  jdbcType="INTEGER"/>
>
>    <parameter property="contractId"  jdbcType="VARCHAR"/>
>
> </parameterMap>
>
>
>
> <update id="updateContractStatus" parameterMap="update">
>
>    update digicon.contract set contractStatusCode = ? where contractId = ?
>
> </update>
>
>
>
>
>
> It appears to me as though the "?" are not being substituted. Any thoughts
> would be greatly appreciated.
>
>
>
> Best Regards,
>
> Robert Krenek
>
>
>
>
>
>
>
>
>

Re: Substitution Error on Insert?

Posted by Ashok Madhavan <as...@gmail.com>.
shouldnt you be using something like this :

<update id="updateContractStatus" parameterMap="update">

   update digicon.contract set contractStatusCode = #
contractStatusCode:INTEGER# where contractId = #contractId#

</update>
regards
ashok

On Jan 22, 2008 3:45 PM, Krenek, Robert <Ro...@emc.com> wrote:

>  Hi All,
>
>
>
> I'm running into an issue that I cannot resolve.  If you can provide any
> assistance, your help would be much appreciated.
>
>
>
> The environment consists of Ibatis, along with Apache and Tomcat on Linux
> connecting to a DB2 database on an as400.
>
>
>
> Insert statements that once worked, are suddenly failing with the
> following error:
>
>
>
> java.sql.SQLException: The number of parameter values set or registered does not match the number of parameters.
>
>         com.ibm.as400.access.JDError.throwSQLException(JDError.java:360)
>
>         com.ibm.as400.access.AS400JDBCPreparedStatement.commonExecuteBefore(AS400JDBCPreparedStatement.java:464)
>
>         com.ibm.as400.access.AS400JDBCStatement.commonExecute(AS400JDBCStatement.java:631)
>
>         com.ibm.as400.access.AS400JDBCPreparedStatement.execute(AS400JDBCPreparedStatement.java:726)
>
>         com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:81)
>
>         com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteUpdate(GeneralStatement.java:200)
>
>         com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:78)
>
>         com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:505)
>
>         com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
>
>         com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:67)
>
>         net.diginc.digicon.dao.HomeOfficeAdminDAO.updateContractStatus(HomeOfficeAdminDAO.java:172)
>
>         net.diginc.digicon.services.HomeOfficeAdminService.abandonContract(HomeOfficeAdminService.java:359)
>
>         org.apache.jsp.ProcessAbandonContract_jsp._jspService(ProcessAbandonContract_jsp.java:65)
>
>         org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
>
>         javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>
>         org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
>
>         org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
>
>         org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
>
>         javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>
>
>
>
>
> Here is the DAO insert code:
>
>
>
> *public* *void* updateContractStatus( String contractId, ContractStatus
> contractStatus ) *throws* Exception
>
>       {
>
>             SqlMapClient sqlMap = FdlicSqlConfiguration.*getSqlMapInstance
> *();
>
>             HashMap<String,Object> parameters = *new* HashMap<String,
> Object>();
>
>             parameters.put("contractStatusCode", contractStatus.getCode()
> );
>
>             parameters.put("contractId", contractId );
>
>             sqlMap.update("updateContractStatus", parameters );
>
>       }
>
>
>
>
>
> Here is the map from the sqlmap:
>
>
>
> <parameterMap id="update" class="java.util.Map">
>
>    <parameter property="contractStatusCode"  jdbcType="INTEGER"/>
>
>    <parameter property="contractId"  jdbcType="VARCHAR"/>
>
> </parameterMap>
>
>
>
> <update id="updateContractStatus" parameterMap="update">
>
>    update digicon.contract set contractStatusCode = ? where contractId = ?
>
> </update>
>
>
>
>
>
> It appears to me as though the "?" are not being substituted. Any thoughts
> would be greatly appreciated.
>
>
>
> Best Regards,
>
> Robert Krenek
>
>
>
>
>
>
>
>
>