多个线程在MySQL中插入数据

时间:2015-07-06 12:16:12

标签: mysql multithreading

我希望在这个代码的各个线程的表中同时插入多个记录。但只有一半的线程工作,其余的显示:错误:重复条目''为密钥'PRIMARY'

 final Connection con=MyConnection.connect();
         try{
            con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
            con.setAutoCommit(false);
         }catch (Exception e) { System.out.println("Error: " + e.getMessage()); }
            Thread[] threads = new Thread[50];
             for (int i = 0; i < threads.length; i++) {
                 threads[i] = new Thread(new Runnable() {
                     public void run() {
                            try{
                                int idr=0; 
                                    Statement st = con.createStatement();
                                    ResultSet rs1 = st.executeQuery("SELECT max(id) FROM employee;");
                                    rs1.next();
                                    idr = rs1.getInt(1)+1;
                                   st.executeUpdate("insert into employee(id,name,address) values('"+idr+"','"+ name+"','"+adrress+"');");
                                   con.commit(); 
                            } catch (Exception e) { System.out.println("Error: " + e.getMessage()); }
                          }
                 });
                 threads[i].start();
             }

1 个答案:

答案 0 :(得分:1)

您不需要为每个插页获取表格中的最大ID。每个数据库都有一个自动处理它的选项。您需要让主键“自动增加”#39;。这样,每个插入的ID将由数据库自动递增。只需运行以下查询一次。

ALTER TABLE EMPLOYEE MODIFY COLUMN ID INT AUTO_INCREMENT PRIMARY KEY;

完成表格更新后。只需从插入查询中删除ID部分即可。您不需要在查询中写入,因为它将由数据库处理。希望有所帮助!