先感谢下看帖子的人 int i = 0;
try {
NewsBean nb = getById(id);
Connection conn = DBHelp.getConnection();
conn.setAutoCommit(false); // 设置自动提交为FALSE 开启事务
try {
String sql = "delete from contents where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, nb.getContent());
i = ps.executeUpdate();
                                System.out.println(i);
sql = "delete from news where id=?";
ps = conn.prepareStatement(sql);
ps.setInt(1, nb.getId());
i = ps.executeUpdate();
                                System.out.println(i);
conn.commit();// 提交事务
} catch (Exception e) {
e.printStackTrace();
conn.rollback();// 事务回滚
} finally {
conn.setAutoCommit(true); // 恢复自动提交
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return i;
两个问题1.请各位帮我看看 这让处理 事务对不对  感觉怪怪的  有好的处理方法希望共享下2.i 输出了两次  第一次为 1   第二次为 0   为什么?有什么办法  输出 事务处理总影响行数

解决方案 »

  1.   

    是不是这个意思
    i=0;
    i+= ps.executeUpdate(); //累加i 的值
    试试。
      

  2.   


    i 输出了两次  第一次为 1  第二次为 0  为什么?有什么办法  输出 事务处理总影响行数因为 i第一次 是记录的delete from contents where id=? 执行影响行数  为1说明 影响行数为1
    第二次是记录的delete from news where id=? 执行影响的行数 为0说明影响行数为 0楼主想得到 总影响记录数:
    那么 可以声明用 两个变量记录 记录两次操作受影响的行数
    一楼二楼的也可以实现记录两次操作受影响的总行数
      

  3.   

    数据库返回值不会说谎的,第二个就是没有删除任何行。
    也许你设置了级联删除,你删除第一个的时候,数据库自动删除了第二个。至于事务,你的做法差不多。但是最外面的那个try catch 有点奇怪!
      

  4.   

    是不是这个意思
    i=0;
    i+= ps.executeUpdate(); //累加i 的值
    试试。
      

  5.   

    conn.setAutoCommit(true); // 恢复自动提交  这个不需要吧!
      

  6.   

    这个不恢复会出错的吧...
    真的觉得你你写的第二个try {}catch(){}怪怪的,..
      

  7.   

    conn.setAutoCommit(true);  这个错了,改成  conn.commit();
      

  8.   

    一个try……catch……不就够了么?