t_transaction_total ttts = new t_transaction_total();
ttts.setId(ttt.getId());
ttts.setStatus(5);
int a = instantArrivalService.upCapitalStatus(ttts);
在new一个实体表的时候,表里面的初始数据都是为null的int类型的为0,我set 2个数据进来,再去执行修改操作,里面拼接的sql是修改我全部表的内容
update t_transaction_total set status = 5 ,xx=0 , xx = null where id = 1
这样子我以前的数据不就被修改了吗?
难道我要先执行一个查询再去修改吗?
那你判断变量为null就别拼接set呗
你试试用MERGE INTO语句
你在拼接SET语句的循环里面,加个判断,具体逻辑是:
1. if(placeholders.get(i)="null"),则说明现在sql字串里面一定是出现了有同样字段名称的"=0,"。
2. 在接下面的IF语句体里,只需要用字串的查找定位和截取,就能得到"= null"前面的字段名称。比如把它赋值为theforever变量。然后你再对现在的SQL语句执行一个替换,替换所查找的内容就是:
theforever+"=0 ,"+theforever+" = null"
,把它替换成空即"",就消除了这条非法的字段条件。
你那个sql拼接的有问题 在where前面应该多了一个","号