插入数据提示错误

插入数据提示错误

"C:\Program Files\Java\jdk1.8.0_191\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3\lib\idea_rt.jar=58823:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\JetBrains\IntelliJ IDEA 2018.3\lib\idea_rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.3\plugins\junit\lib\junit-rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_191\jre\lib\rt.jar;C:\Users\SR-71\OneDrive\IntellijWork\sc\target\test-classes;C:\Users\SR-71\OneDrive\IntellijWork\sc\target\classes;D:\repo\mysql\mysql-connector-java\8.0.13\mysql-connector-java-8.0.13.jar;D:\repo\com\google\protobuf\protobuf-java\3.6.1\protobuf-java-3.6.1.jar;D:\repo\org\springframework\spring-core\5.1.3.RELEASE\spring-core-5.1.3.RELEASE.jar;D:\repo\org\springframework\spring-jcl\5.1.3.RELEASE\spring-jcl-5.1.3.RELEASE.jar;D:\repo\org\springframework\spring-beans\5.1.3.RELEASE\spring-beans-5.1.3.RELEASE.jar;D:\repo\org\springframework\spring-aop\5.1.3.RELEASE\spring-aop-5.1.3.RELEASE.jar;D:\repo\org\springframework\spring-context\5.1.3.RELEASE\spring-context-5.1.3.RELEASE.jar;D:\repo\org\springframework\spring-expression\5.1.3.RELEASE\spring-expression-5.1.3.RELEASE.jar;D:\repo\org\springframework\spring-jdbc\5.1.3.RELEASE\spring-jdbc-5.1.3.RELEASE.jar;D:\repo\org\springframework\spring-tx\5.1.3.RELEASE\spring-tx-5.1.3.RELEASE.jar;D:\repo\junit\junit\4.12\junit-4.12.jar;D:\repo\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 Test,testBathUpdate2
org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [insert into selection(student,course) values(?,?)]; Duplicate entry '3-1003' for key 'PRIMARY'; nested exception is java.sql.BatchUpdateException: Duplicate entry '3-1003' for key 'PRIMARY'
 at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:242)
 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
 at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1444)
 at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:632)
 at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:646)
 at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:936)
 at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:990)
 at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:981)
 at Test.testBathUpdate2(Test.java:48)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:498)
 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
 at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
 at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
 at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
 at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
 at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
 at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.sql.BatchUpdateException: Duplicate entry '3-1003' for key 'PRIMARY'
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
 at com.mysql.cj.util.Util.handleNewInstance(Util.java:191)
 at com.mysql.cj.util.Util.getInstance(Util.java:166)
 at com.mysql.cj.util.Util.getInstance(Util.java:173)
 at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224)
 at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:874)
 at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:456)
 at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:814)
 at org.springframework.jdbc.core.JdbcTemplate.lambda$batchUpdate$2(JdbcTemplate.java:950)
 at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617)
 ... 27 more
Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '3-1003' for key 'PRIMARY'
 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:117)
 at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
 at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
 at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:974)
 at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1113)
 at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchSerially(ClientPreparedStatement.java:853)
 ... 31 more

Process finished with exit code -1
@org.junit.Test
public void testBathUpdate2() {
    String sql = "insert into selection(student,course) values(?,?)";
    List<Object[]> list = new ArrayList<Object[]>();
    list.add(new Object[]{3, 1001});
    list.add(new Object[]{3, 1003});
    jdbcTemplate.batchUpdate(sql, list);
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕阿莹 2018-12-06 10:55:06

1、同学的主键是不是联合主键呢?就是说student和course是联合主键。

2、同学在插入list.add(new Object[]{3, 1003}); 这条之前数据库中是否有 3 1003 这条了呢?

3、同学试试插入数据库中没有的这种联合数据。

例如,你的截图中student 到4的情况下,你插入

list.add(new Object[]{5, 1001});

list.add(new Object[]{5, 1003}); 

试试,看看是否好报这个异常。

4、同学的建议已转达相关工作人员,感谢同学的建议。

祝学习愉快。


  • 提问者 M_Force #1
    是联合主键,通过数据库的方式能插入,但运行程序就会报上面这个错误
    2018-12-06 12:44:33
  • 好帮手慕阿莹 回复 提问者 M_Force #2
    想和同学确认一下,用程序插入时,是否确认数据库中确实没有这两条要插入的数据么?可以在执行前,刷新一下数据库。祝学习愉快。
    2018-12-06 13:43:01
  • 提问者 M_Force 回复 好帮手慕阿莹 #3
    确认没有的
    2018-12-06 15:50:24
提问者 M_Force 2018-12-06 08:55:56
好帮手慕阿莹 2018-12-05 11:08:19

这条提示是插入的主键不能重复。同学把数据改一下呦。

尤其是插入的主键不能重复。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 M_Force #1
    但是相同主键的我直接在数据库里操作就成功了
    2018-12-05 12:43:57
  • 好帮手慕阿莹 回复 提问者 M_Force #2
    恩?同学是如何操作的呢?可以截图看一下么?主键是不可以重复的。祝学习愉快
    2018-12-05 14:26:26
  • 提问者 M_Force 回复 好帮手慕阿莹 #3
    已回复,请老师看一下,顺便建议回复窗口设计为可以粘贴图片,现在是只能打文字
    2018-12-06 09:00:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师