public void addStudent(List<Student> students) {
Connection conn = DB.getConnection();
String sql = "insert into student values(?, ?, ?)";
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(sql);
conn.setAutoCommit(false);
for(int i=0; i<students.size(); i++) {
Student s = students.get(i);
pstmt.setInt(1, s.getId());
pstmt.setString(2, s.getName());
pstmt.setInt(3, s.getAge());
pstmt.addBatch();
}
pstmt.executeBatch();// 在此卡住,没有出现异常,但就是不动
conn.commit();
conn.setAutoCommit(true);

} catch (SQLException e) {
try {
conn.rollback();
conn.setAutoCommit(true);
} catch (SQLException e1) {
e1.printStackTrace();

e.printStackTrace();
} finally {
DB.close(pstmt);
DB.close(conn);
}
}

解决方案 »

  1.   

    可能还未提交数据http://topic.csdn.net/u/20100325/16/7e6682bf-7391-4a26-9752-64f4259788ee.html
      

  2.   

    把这个 try {
                    conn.rollback();
                    conn.setAutoCommit(true);
                } catch (SQLException e1) {
                    e1.printStackTrace();
                } 
                e.printStackTrace();
    换为:
     e.printStackTrace();
     try {
                    conn.rollback();
                    conn.setAutoCommit(true);
                } catch (SQLException e1) {
                    e1.printStackTrace();
                } 
    看看异常的信息吧。
               
      

  3.   

    把这句SQL:
        String sql = "insert into student values(?, ?, ?)";
    换成:
        String sql = "insert into student(id,name,age) values(?, ?, ?)";
      

  4.   

    怎么写了这么多的conn.setAutoCommit(true);
    楼主知道conn.setAutoCommit(true);
    是什么意思吗?楼主把conn.setAutoCommit(true);
    全部去掉。如果要有程序控制事物,必须是conn.setAutoCommit(false);而且程序必须调用commit或者rollback方法。因此,只需在开始写一次conn.setAutoCommit(false)就可以
      

  5.   

    ooooooooooooooooooooooooooooooooooooooooo