I've been using the selectkey statement myself today, and if i use my syntax on your problem i would look like this:
<insert id="addRole" parameterClass="com.ibt.dview.da.model.Role"> <selectKey resultClass="int" keyProperty="roleId" > SELECT last_insert_id() AS roleId </selectKey> insert into da_role(ROLE_ID,ROLE_NAME,ROLE_DESC) values (#roleId#,#roleName#, #roleDesc#) </insert> Hopefully it helps. Greetz, Tom Cassimon 2005/4/18, Siti Norhairatul Aishah <[EMAIL PROTECTED]>: > > Hi all, > I am having a problem when trying to insert into a MySQL database.I am > using Ibatis 2.0 on Spring framework. Here is the error I'm getting. > > com.ibatis.common.jdbc.exception.NestedSQLException: > --- The error occurred in /com/ibt/dview/da/model/Role.xml. > --- The error occurred while executing update. > --- Check the insert into da_role(ROLE_NAME,ROLE_DESC) values (?, ?) . > --- Check the SQL Statement (preparation failed). > --- Cause: java.lang.NullPointerException > Caused by: java.lang.NullPointerException > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:89) > at > com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.insert(SqlMapExecutorDelegate.java:442) > at > com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.insert(SqlMapSessionImpl.java:85) > at > org.springframework.orm.ibatis.SqlMapClientTemplate$9.doInSqlMapClient(SqlMapClientTemplate.java:295) > at > org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:165) > at > org.springframework.orm.ibatis.SqlMapClientTemplate.insert(SqlMapClientTemplate.java:293) > at > com.ibt.dview.da.dao.RoleDAOImpl.addRole(RoleDAOImpl.java:51) > at > com.ibt.dview.adaptor.db.DADBAdaptorImpl.addRole(DADBAdaptorImpl.java:94) > at > com.ibt.dview.da.service.DAServiceImpl.addRole(DAServiceImpl.java:188) > at > com.ibt.dview.da.bean.DARoleBean.addRole(DARoleBean.java:80) > 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:324) > at > com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126) > at > com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72) > at > javax.faces.component.UICommand.broadcast(UICommand.java:312) > at > javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267) > at > javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381) > at > com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75) > at > com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200) > at > com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90) > at > javax.faces.webapp.FacesServlet.service(FacesServlet.java:197) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564) > at > org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972) > at > org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700) > at > org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) > at java.lang.Thread.run(Thread.java:534) > Caused by: java.lang.NullPointerException > at > com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:1845) > at > com.mysql.jdbc.PreparedStatement.toString(PreparedStatement.java:1770) > at java.lang.String.valueOf(String.java:2131) > at java.lang.StringBuffer.append(StringBuffer.java:370) > at > com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240) > at com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167) > at com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126) > at > com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45) > at > com.mysql.jdbc.Connection.registerStatement(Connection.java) > at com.mysql.jdbc.Statement.<init>(Statement.java:171) > at > com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:139) > at > com.mysql.jdbc.ServerPreparedStatement.toString(ServerPreparedStatement.java:851) > at java.lang.String.valueOf(String.java:2131) > at java.lang.StringBuffer.append(StringBuffer.java:370) > at > com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240) > at com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167) > at com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126) > at > com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45) > at > com.mysql.jdbc.Connection.registerStatement(Connection.java) > at com.mysql.jdbc.Statement.<init>(Statement.java:171) > at > com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:201) > at > com.mysql.jdbc.ServerPreparedStatement.<init>(ServerPreparedStatement.java:133) > at > com.mysql.jdbc.Connection.prepareStatement(Connection.java:1370) > at > com.mysql.jdbc.Connection.prepareStatement(Connection.java:1335) > at > org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:216) > at > org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:323) > 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:324) > at > com.ibatis.common.jdbc.logging.ConnectionLogProxy.invoke(ConnectionLogProxy.java:50) > at $Proxy0.prepareStatement(Unknown Source) > at > com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:77) > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.sqlExecuteUpdate(GeneralStatement.java:195) > at > com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeUpdate(GeneralStatement.java:73) > ... 46 more > > > My statement is as simple as follows > > <resultMap id="role-result" class="com.ibt.dview.da.model.Role"> > <result property="roleId" column="ROLE_ID" /> > <result property="roleName" column="ROLE_NAME" /> > <result property="roleDesc" column="ROLE_DESC" /> > </resultMap> > > <insert id="addRole" parameterClass="com.ibt.dview.da.model.Role"> > insert into da_role(ROLE_NAME,ROLE_DESC) > values (#roleName#, #roleDesc#) > <selectKey resultClass="int" keyProperty="roleId" > > SELECT last_insert_id() AS roleId > </selectKey> > </insert> > > I've tried to look into this mailing list, and my code seems to look > fine.What am I doing wrong here.. Initially when I tried running the same > statement on oracle 8.. it was ok. Of course I had the selectKey argument to > suit oracle then. I changed my MySQL table from InnoDB to MyISAM but still > it does not work. I have also disabled the Transaction Manager in Spring to > let this work, but still it does not have any impact. It seems like the sql > statement supplied is incorrect but I doubt so. > > Please if anyone can help me.. really appreciate it. > > Thanks. >