org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.sql.SQLException: No value specified for
parameter 5
### The error may involve
com._520it.mybatis.domain.User.update-Inline
### The error occurred while setting
parameters
### SQL: UPDATE User SET
username=?,email=?,age=?,hireDate=? WHERE id=?;
### Cause: java.sql.SQLException: No
value specified for parameter 5
at
org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23)
at
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:147)
at
com._520it.mybatis.test.MapperTest.testUpdate(MapperTest.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at
org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at
org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at
org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.sql.SQLException: No
value specified for parameter 5
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at
com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2613)
at
com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2588)
at
com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2512)
at
com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1316)
at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at
java.lang.reflect.Method.invoke(Method.java:606)
at
org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:58)
at com.sun.proxy.$Proxy3.execute(Unknown Source)
at
org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:41)
at
org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:66)
at
org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:45)
at
org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:108)
at
org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75)
at
org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:145)
... 24 more
原因总结:占位符写错了,原本是应该写成WHERE id =
#{id},我却写成了WHERE id =
?。还有测试类中一定要记得给创建出来的对象设置id,否则被修改的对象为null,就相当于是没有修改