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

关于PreparedStatement有关问题

2012-11-03 
关于PreparedStatement问题?Java codepublic boolean insert(String sql, Object... args) throws SQLExce

关于PreparedStatement问题?

Java code
    public boolean insert(String sql, Object... args) throws SQLException,            ClassNotFoundException {        PreparedStatement pstmt = getConn().prepareStatement(sql);        for (int i = 0; i < args.length; i++)            pstmt.setObject(i + 1, args[i]);        if (pstmt.executeUpdate() != 1)            return false;        return true;    }

可以执行几个这样的方法,在提交事物吗?
也就是几个insert组成一个事物。
求解释。

[解决办法]
这样的方法不行,必须来自一个连接,并且在刚获取连接时取消自动提交并启动事务。

最后完毕时调用commit(),如果失败了则调用rollback();
[解决办法]
类似这样:

Connection conn = getConn();
try { 
conn.setAutoCommit(false); //设置不会自动提交,也即后续操作将保持在一个事务内
insert(conn, "SQL1"); // 可以调用函数多次
insert(conn, "SQL2");
...
conn.commit(); //提交事务 
} catch(Exception e) { 
conn.rollback(); // 操作不成功,回滚事务 
e.printStackTrace();
} finally {
conn.close(); 
}
[解决办法]
多次调用insert倒是可以,只是批量插入的时候最好用批量插入的方法executeBatch,而不是多次执行insert操作。

热点排行