为什么一直跳主键报错 299999是最大值吗?主键是没数据的

为什么一直跳主键报错 299999是最大值吗?主键是没数据的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.imooc.jdbc.sample;
 
import com.imooc.jdbc.hrapp.common.DbUtils;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
 
public class BatchSample {
    private static void tc1(){
        Connection conn = null;
        PreparedStatement pstmt = null;
        int num=0;
        try {
            long startTime = new Date().getTime();
            conn = DbUtils.getConnection();
            conn.setAutoCommit(false);
            String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)";
            for (int i = 100000;i < 200000;i ++){
                pstmt = conn.prepareStatement(sql);
                pstmt.setInt(1,i);
                pstmt.setString(2,"员工"+i);
                pstmt.setFloat(3,4000f);
                pstmt.setString(4,"市场部");
                num = pstmt.executeUpdate()+num;
            }
            if (num != 0){
                System.out.println("成功"+num);
            }else {
                System.out.println("失败"+num);
            }
            conn.commit();
            long endTime = new Date().getTime();
            System.out.println(endTime-startTime);
        catch (Exception e) {
            e.printStackTrace();
            try {
                if (conn != null && !conn.isClosed()){
                    conn.rollback();
                }
            catch (SQLException ex) {
                e.printStackTrace();
            }
        }finally {
            DbUtils.closeConnection(null,pstmt,conn);
        }
    }
 
    private static void tc2(){
        Connection conn = null;
        PreparedStatement pstmt = null;
        int num=0;
        try {
            long startTime = new Date().getTime();
            conn = DbUtils.getConnection();
            conn.setAutoCommit(false);
            String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)";
            for (int i = 200000;i < 300000;i ++){
                pstmt = conn.prepareStatement(sql);
                pstmt.setInt(1,i);
                pstmt.setString(2,"员工"+i);
                pstmt.setFloat(3,4000f);
                pstmt.setString(4,"市场部");
                num = pstmt.executeUpdate()+num;
                pstmt.addBatch();
            }
            if (num != 0){
                System.out.println("成功"+num);
            }else {
                System.out.println("失败"+num);
            }
            pstmt.executeBatch();
            conn.commit();
            long endTime = new Date().getTime();
            System.out.println(endTime-startTime);
        catch (Exception e) {
            e.printStackTrace();
            try {
                if (conn != null && !conn.isClosed()){
                    conn.rollback();
                }
            catch (SQLException ex) {
                e.printStackTrace();
            }
        }finally {
            DbUtils.closeConnection(null,pstmt,conn);
        }
    }
 
    public static void main(String[] args) {
        tc1();
        tc2();
    }
}

https://img1.sycdn.imooc.com/climg/66cef4860969fe4709560462.jpg


下载视频
投屏
复制链接

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

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

1回答
好帮手慕小蓝 2024-08-29 09:57:16

同学你好,报错信息中的“Duplicate”是指“299999”这个主键重复了,建议同学查看一下数据库中的数据。

祝学习愉快~

  • 提问者 鱿鱼三明治 #1
    不是 我解决了 是executeupdate方法没删 删了之后正常了 这个是为什么呢?
    2024-08-29 15:10:17
  • 好帮手慕小蓝 回复 提问者 鱿鱼三明治 #2

    同学你好,执行流程和之前同学的问答中是一样的,循环只有最后一次才会尝试被提交,但是提交之前可以看到,pstmt.executeBatch();语句尝试添加299999为主键的数据,而pstmt.addBatch();也尝试299999为主键的数据。当执行conn.commit();时,两个299999为主键的数据互相重复,就会报这个错误了。

    祝学习愉快~

    2024-08-29 15:29:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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