pstmt=con.prepareStatement("insert into UserLogin values(?,?)");
   pstmt.setString(1, "haha4");
   pstmt.setString(2, "haha4");
   pstmt.addBatch();
   
   pstmt.setString(1, "haha5");
   pstmt.setString(2, "haha5");
   pstmt.addBatch();
   
   pstmt.setString(1, "haha6");
   pstmt.setString(2, "haha6");
   pstmt.addBatch();
   pstmt.executeBatch();
   pstmt.close();
   
   con.close();程序在pstmt.executeBatch();的地方就一直不动了。
表里面大约5多万条数据,当然这里原始的循环插入数据,大约近万条,不过每一千条就提交一次。。

解决方案 »

  1.   

    代码没问题,可能是其他地方执行了DML操作,导致表被锁住了,所以这里不能insert。你把其他数据库会话(比如你的客户端,命令行,其他程序。。凡是连到了哪个数据库的会话)都commit一下。或者直接在session列表里面把其他连接kill掉(如果你是开发环境没关系的话)。
      

  2.   

    这样的代码应该没问题的:import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    import java.util.UUID;import test.mysql.MConnection;public class UUIDTest {
    public static void test() {
    Connection con = null;
    PreparedStatement ps = null;
    try {
    con = MConnection.getConn();
    String sql = "insert into uuidtest(uuid) values(?)";
    ps = con.prepareStatement(sql);
    for (int i = 0; i < 10000; i++) {
    String uuid = UUID.randomUUID().toString();
    System.out.println(uuid);
    ps.setString(1, uuid);
    ps.addBatch();
    }
    ps.executeBatch();
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    if (ps != null) {
    try {
    ps.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    if (con != null) {
    try {
    con.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
    } public static void main(String[] args) {
    UUIDTest.test(); }
    }
      

  3.   

    首先要看conn是不是设置了自动提交。
    如果autoCommit是false,当然要等你提交。
      

  4.   

    这个问题,一般都是数据库那边没有commit,先去数据库提交下吧~应该能解决了~