这个JAVA事务问题在哪?为什么有时候只减了汇款者金额却没给收款者加?
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;
}
...全文
相关推荐
基于Java的邮政汇款打印程序.zip
基于Java的邮政汇款打印程序.zip
用java多线程做的银行汇款问题
3.假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。现有两个顾客, //每人都分3次,每次100元将钱到入。 试编写一个程序,模拟实际作业。
java编写一个类,该类可以进行加、减、乘、除四则运算,并且输出运算结果
编写一个Java源程序,其中包含: (1)编写一个类,该类可以进行加、减、乘、除四则运算,并且可以输出运算结果。此外,对于除法,如果被除数为0,该类可以报错。对于加、减、乘、除之外的运算符,该类应该告知无法处理。 (2)编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入两个运算数(double 类型)和一个运算符(char 类型),使用(1)中的类输出运算结果(保留两位小数)。如果想继续计算,输入continue,否则,输入finish。
JAVA源码邮政汇款打印程序JAVA源码邮政汇款打印程序
JAVA源码邮政汇款打印程序JAVA源码邮政汇款打印程序
Java_2.1:Задача№1-汇款
Java_2.1:Задача№1-汇款


Web 开发
