当前位置: 代码迷 >> Java Web开发 >> 这个JAVA事务有关问题在哪?为什么有时候只减了汇款者金额却没给收款者加
  详细解决方案

这个JAVA事务有关问题在哪?为什么有时候只减了汇款者金额却没给收款者加

热度:87   发布时间:2016-04-17 01:29:13.0
这个JAVA事务问题在哪?为什么有时候只减了汇款者金额却没给收款者加?
Java code
    public boolean agentUpdateCustomerBalance(int agent_id,String  username,int count)//代理给客户        {        DBHelper helper=new DBHelper();        Connection conn=helper.getConn();                int res=0;        try        {            conn.setAutoCommit(false);            conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);                                    PreparedStatement ps=helper.createPreparedStatement("select balance from boss_agent where id=?");            ps.setInt(1,agent_id);            ResultSet rs=ps.executeQuery();            if(rs.next()&& rs.getInt("balance")-count>=0)            {                ps=helper.createPreparedStatement("select money_remain from users  where username=?");                ps.setString(1, username);                rs=ps.executeQuery();                if(rs.next()&& rs.getInt("money_remain")+count>=0)                {//                    conn.setAutoCommit(false);//                    conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);                                                            ps=helper.createPreparedStatement("update boss_agent set balance=ifnull(balance,0)-(?) where id=?");                    ps.setInt(1, count);                    ps.setInt(2, agent_id);                    res+=ps.executeUpdate();                    System.out.println("Jian"+ps.toString());                                        ps=helper.createPreparedStatement("update users set money_remain=ifnull(money_remain,0)+(?) where username=?");                    ps.setInt(1, count);                    ps.setString(2, username);                        res+=ps.executeUpdate();                    System.out.println("Jia"+ps.toString());                                        if(res==2){                        System.out.println("conn.commit();2");                        conn.commit();                                            }                    else{                        System.out.println("conn.rollback();2");                        conn.rollback();                    }                                        ps=helper.createPreparedStatement("select user_id from  users  where username=?");                    ps.setString(1, username);                    rs=ps.executeQuery();                    int user_id=0;                    if(rs.next())                        user_id=rs.getInt("user_id");                    ps=helper.createPreparedStatement("update boss_customer set total_balance=ifnull(total_balance,0)+(?) where user_id=?");                    ps.setInt(1, count);                    ps.setInt(2, user_id);                    res+=ps.executeUpdate();                    if(res==3)                        conn.commit();                    else                         conn.rollback();                }                                                                }            conn.commit();                    } catch (SQLException e)        {            try            {                conn.rollback();            } catch (SQLException e1)            {                e1.printStackTrace();            }            e.printStackTrace();        }        helper.closeAll();        return res==3;    }


------解决方案--------------------
建议使用spring的声明式事务机制,配置简单,不需要写Java代码
------解决方案--------------------
探讨
引用:
在异常处理时应该加上conn.setAutoCommit(true);


异常了,还启动自动提交?
症结是在这里吗??
不理解,能说得详细点吗?谢谢你。

------解决方案--------------------
  相关解决方案