首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

PreparedStatement的executeBatch()步骤为什么执行不过去

2011-12-25 
PreparedStatement的executeBatch()方法为什么执行不过去Java codepublic void addStudent(ListStudent

PreparedStatement的executeBatch()方法为什么执行不过去

Java code
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);        }    }


[解决办法]
可能还未提交数据

http://topic.csdn.net/u/20100325/16/7e6682bf-7391-4a26-9752-64f4259788ee.html
[解决办法]
把这个 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();

看看异常的信息吧。

[解决办法]
把这句SQL:
Java code
String sql = "insert into student values(?, ?, ?)";
[解决办法]
怎么写了这么多的conn.setAutoCommit(true);
楼主知道conn.setAutoCommit(true);
是什么意思吗?楼主把conn.setAutoCommit(true);
全部去掉。如果要有程序控制事物,必须是conn.setAutoCommit(false);而且程序必须调用commit或者rollback方法。因此,只需在开始写一次conn.setAutoCommit(false)就可以

热点排行