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.