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);
}
}
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);
}
}
解决方案 »
- 请教一个递归问题
- 托盘程序托盘图标显示不出来
- 一个js文件调用另一个js文件的函数
- wml 空格怎么表示
- 请教一个“递归”和“非递归”双解练习题
- 关于调用Java包出现的问题,请高手给我讲讲!
- 关于StreamTokenizer的用法很迷惑呀,到底默认是用什么分割符?还有ordinaryChar的用法,急!
- applet安全性问题!!applet安全性问题!!急!!在线等!!!100分!!不够可再加!!!
- 各位仁兄,发现了吗,用BorderLayout布好了界面,但是不能像jBuilder那样可以用鼠标箭头调整每个区域的大小,而是固定的
- 第一次进入,请帮忙!
- 菜鸟求助~
- 继续请教序列化为二进制字节流的问题!
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();
}
看看异常的信息吧。
String sql = "insert into student values(?, ?, ?)";
换成:
String sql = "insert into student(id,name,age) values(?, ?, ?)";
楼主知道conn.setAutoCommit(true);
是什么意思吗?楼主把conn.setAutoCommit(true);
全部去掉。如果要有程序控制事物,必须是conn.setAutoCommit(false);而且程序必须调用commit或者rollback方法。因此,只需在开始写一次conn.setAutoCommit(false)就可以