mybatis mysql update更新数据出错!

时间:2022-09-21 17:08:01

public class UpdateTest {
public static void main(String[] args) {
SqlSession sqlSession = HBSqlSessionFactory.getSqlSession();
User user = sqlSession.selectOne("com.mybatis.test.UserMapper.selectUser", 15);
user.setId(3);
user.setName("qfef");
sqlSession.update("com.mybatis.test.UserMapper.modifyUser", user);
sqlSession.commit();
sqlSession.close();
}
}


Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '3' for key 'PRIMARY'
### The error may involve com.mybatis.test.UserMapper.modifyUser-Inline
### The error occurred while setting parameters
### SQL: update user set name=?, id=?
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '3' for key 'PRIMARY'
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:200)
at com.Test.UpdateTest.main(UpdateTest.java:14)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '3' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2834)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:59)
at com.sun.proxy.$Proxy1.execute(Unknown Source)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:46)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
... 1 more

其中Id字段为主键,是否设为自增我都试过了!难道主键不可以update???

5 个解决方案

#1


主键当然可以修改,自动增长只是当插入的数据为空的时候会自动赋值,但这并不影响你的修改。
从楼主的报错来看,应该是楼主的主键重复所造成的。
Duplicate entry '3' for key 'PRIMARY'
这句报错说的也很清楚了,主键:3 这个值重复了,主键是不能重复的!

#2


mybatis mysql update更新数据出错!楼上说的对

#3


已经有id为3 了

#4


1楼说的很清楚了。

#5


 Duplicate entry '3' for key 'PRIMARY' 大哥先用有道翻译再问吧

#1


主键当然可以修改,自动增长只是当插入的数据为空的时候会自动赋值,但这并不影响你的修改。
从楼主的报错来看,应该是楼主的主键重复所造成的。
Duplicate entry '3' for key 'PRIMARY'
这句报错说的也很清楚了,主键:3 这个值重复了,主键是不能重复的!

#2


mybatis mysql update更新数据出错!楼上说的对

#3


已经有id为3 了

#4


1楼说的很清楚了。

#5


 Duplicate entry '3' for key 'PRIMARY' 大哥先用有道翻译再问吧