我用了incrementAndGet(),但是发现增加过的值放不去sql了

防止线程并发,我用了一个线程安全的方法让count+1,但是加过之后每次SQL都执行不了,前台500异常,后台没打印任何东西,Debug了一下,到SQL就不走了,直接异常,我是刚接触Jfinal的小白,麻烦大佬看一下哪里出问题了55555555555.png

评论区

MR.zhangzhiwei

2019-06-28 12:11

@杜福忠 每次都艾特你,都有点不好意思了,刚入Jfinal的坑,多包涵,哈哈哈

杜福忠

2019-06-28 13:13

改成:
Db.update("update report set count =? where id = ?", integer.incrementAndGet(), getInt("id"));

原因:
update的参数虽然是OBJ类型, 但是不是什么对象都能放的, 只能是几个基础类型, JDBC对应的那几个.
控制台输出的参数, 你感觉没有问题, 是因为你 "XXX" + integer 这样的写法, 实际是被转成了 StringBuilder 拼接的, 而Object参数的拼接是 append(String.valueOf(obj)) 这样的写法 . 所以你看见的是对象的 toString() 输出形式!

杜福忠

2019-06-28 13:14

上面只是说代码的问题, 再说你这个业务实现的问题, 应该用数据库的乐观锁吧?
https://www.jfinal.com/share/1616

杜福忠

2019-06-28 13:19

我觉得你可以加入 俱乐部 试试, 里面大神超多, 群文件还有教学视频等各种资料

JFinal

2019-06-28 17:36

AtomicInteger interger 放在方法内部大错特错,每次调用该方法创建一个 AtomicInteger 毫无意义

AtomicInteger 的正确用法是以 static final 属性存在:
static final AtomicInteger interger = new AtomicInteger();

热门反馈

扫码入社