3.2K Star 8.8K Fork 3.6K

GVPJFinal / JFinal

 / 详情

关于Db.update()提交后数据库没有更新的问题

待办的
创建于  
2021-05-25 15:41

各位好,我用的版本可能有点老,2.2的。
最近使用中发现一个问题,我有一个简单的更新数据库的方法,大部分时间是正常的,但是持续运行24小时的样子,就会出现一次失效。
表现为代码层判断更新成功了(根据后台输出日志),但是查看数据库,显然没有更新。

 public static int unLockPoint(int point,int agvid){
        int cn = 0;
        String sql = "update t_point set dynalock=0 where id =? and dynalock=?";
        log.info(sql+" "+point+","+agvid);
        try {
            cn = Db.update(sql, point,agvid);
        } catch (Exception e) {
            
           log.error("agv{} unlock point {} fail,reason:{}",agvid,point,e.getMessage());
        } 
        return cn;
    }

另外一个方法调用当前这个方法,判断返回值是否为1来确定更新成功或失败。
日志显示没有报错也没有输出失败,sql传参也是正常的。
但数据库的数据确实还是没有更新。
由于这个问题不是经常出现,大概调用百万量级会出现。
问题出现时,对数据库操作的就只有当前的进程,没有其它进程干扰。
不知道是哪方面问题。

评论 (3)

一程山水 创建了任务
一程山水 关联仓库设置为JFinal/JFinal
一程山水 修改了描述
展开全部操作日志

会不会是缓存问题 比如A更新了数据库以后但是还没有更新缓存 然后B又用缓存中的数据更新了数据库

对这个表的操作就两个方法,另外一个是加锁,进入方法都有日志输出的。
可以确认的时,第一次加锁成功,加锁时间我有记录。
然后几秒后再调用unLockPoint解锁,数据库就没有写入。
期间没有其它线程调用。
现在就是不确定Db.update这个方法会不会有可能没有提交到数据库,按理说不应该。

好吧,怀疑是mysql问题,因为将Db.update换成JDBC方式直接提交,偶尔也会出现同样的问题。
mysql用的是5.5版本。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
Violation
Java
1
https://gitee.com/jfinal/jfinal.git
git@gitee.com:jfinal/jfinal.git
jfinal
jfinal
JFinal

搜索帮助