例如:
info表中的记录: 编号 姓名 金额
1 张三 17
2 李四 210
3 张三 2
4 李四 12
5 张三 12用户张三,使用在一次购物中使用了金额:22元
那么,在程序中要把用户张三所在的info表中扣除22元。该功能是使用j2ee的实现的,
即:从第一条开始扣,第一条不足就扣第2条,依次类推一直到扣完这22块。,
编号 姓名 金额
1 张三 17 -17(扣了17元)
2 李四 210
3 张三 2 -2 (扣了2元)
4 李四 12
5 张三 12 -3 (扣了3元) 总扣了22元, 结果是:
编号 姓名 金额
1 张三 0
2 李四 210
3 张三 0
4 李四 12
5 张三 9类似于下面SQL的业务逻辑,如果在JAVA EE中,怎样实现declare @info table (编号 int,姓名 varchar(4),金额 int)
insert into @info
select 1,'张三',17 union all
select 2,'李四',210 union all
select 3,'张三',2 union all
select 4,'李四',12 union all
select 5,'张三',12
--张三 消费 22
declare @i int;set @i=22
update @info set @i=case when @i<0 then 0 else @i-金额 end,
金额=case when @i>0 then 0 when @i=0 then 金额 else -@i end
where 姓名='张三' select * from @info
--结果如下:
/* 编号 姓名 金额
1 张三 0
2 李四 210
3 张三 0
4 李四 12
5 张三 9
*/请教在JAVA怎样实现,请大家赐教,感谢.
List<user> userList=得到张三的list;
for(user user:userList){
if(购物金额-user.get金额>0){
//update 该条记录的金额为0
购物金额=22-user.get金额;
}else{
//update 该条记录的金额为 :Math.abs(购物金额);
}
}
//update 该条记录的金额为0
购物金额= 购物金额-user.get金额;
}else{
购物金额= 购物金额-user.get金额;
//update 该条记录的金额为 :Math.abs(购物金额);
}
import java.util.ArrayList;
import java.util.List;/*
1 张三 17
2 李四 210
3 张三 2
4 李四 12
5 张三 12
*/
public class Test {
public static void main(String[] args) {
List<Customer> cs = new ArrayList<Customer>();
cs.add(new Customer("张三", 17));
cs.add(new Customer("李四", 210));
cs.add(new Customer("张三", 2));
cs.add(new Customer("李四", 12));
cs.add(new Customer("张三", 12)); for (Customer c : cs) {
System.out.printf("Name: %s, Balance: %s\n", c.getName(), c.getBalance());
} Customer paidCustomer = new Customer("张三", 22); // 看看钱是否够付款
double sum = 0;
for (Customer c : cs) {
if (c.getName().equals(paidCustomer.getName())) {
sum += c.getBalance();
}
}
if (sum < paidCustomer.getBalance()) {
System.out.println("帐户里的钱不够付款");
return;
} // 付款
for (Customer c : cs) {
if (paidCustomer.getName().equals(c.getName()) && paidCustomer.getBalance() > 0) {
if (c.getBalance() > paidCustomer.getBalance()) {
c.setBalance(c.getBalance() - paidCustomer.getBalance());
paidCustomer.setBalance(0);
} else {
paidCustomer.setBalance(paidCustomer.getBalance() - c.getBalance());
c.setBalance(0);
}
}
} System.out.println();
for (Customer c : cs) {
System.out.printf("Name: %s, Balance: %s\n", c.getName(), c.getBalance());
}
}
}class Customer {
private String name;
private double balance; public Customer(String name, double balance) {
this.name = name;
this.balance = balance;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public double getBalance() {
return balance;
} public void setBalance(double balance) {
this.balance = balance;
}
}
int money=0;
int sum=0;//用来保存已经遍历的记录金额总和;
List <Integer> id=new ArrayList();//保存你要更新的id
//遍历张三记录
int money=0;//让最后一个id金额为money
for(int i=0;i<list.size();i++){
sum+=list.get(i).金额;
id.add(list.get(i).getId);
if(sum-22>0){
money=sum-22;//修改最后id名字张三金额为money,其他记录金额为0;
break;
}
}这里将id为id.get(id.size()-1);金额修改为money;其他为0‘;
更新第一条数据的金额update 0在那里写? 条件满足后,更新SQL又怎样写?