zoukankan      html  css  js  c++  java
  • 小代码大BUG,记解决Sqlite3死锁问题

    随时记录学习,工作中遇到的点滴"大问题,小问题"

    今天遇到了一个问题,sqlite3提示数据库死锁,无法更新,奇怪的是可以插入,可以查询,可以删除,就是不可以更新,

    经过近几个小时的排查,最终找到了问题的根源,

    有一点点想法,就是问题大不大,关键看你懂不懂,或者说,问题解决没解决,如果没解决,那么就是个大问题

    如果问题解决了,那么就是小问题,而且吧,这个小问题或大问题的定义因人而异,而经验而异,

    在有些人眼里就是小儿科,在另外一些人眼里却是高深莫测的大问题,废话可真多啊,呵呵,其实就是一行代码引发的

    是这样的,在业务逻辑层有一个Existed(实体 实例)方法,为了图方便当时的代码是这样的写的,当然现在意识到这样写的问题了,

    近一点,先看错误的代码

     错误代码,不可复制
    //执行查询
                try {
                    
    return db.ExecuteReader( CommandType.Text, sql, parameters ).HasRows;
                } 
    catch( Exception exp ) {
                    
    throw exp;
                }

    有发现问题吗?对了,返回的DataReader没有释放,直接导致了sqlite的死锁!

    现修改如下

    第一次修改后的正确的代码
    //执行查询
                try {
                    
    using( DbDataReader reader = db.ExecuteReader( CommandType.Text, sql, parameters ) ) {
                        
    return reader.HasRows;
                    }
                } 
    catch( Exception exp ) {
                    
    throw exp;
                }

    现在可以正常更新了~死锁问题如此产生,必将如此结束了

    现在再来想一想,这个问题算大问题还是小问题呢?

    第一次听到sqlite死锁时你认为它是个大问题还是个小问题呢? 

    记录学习中的点点滴滴,一次书写,终生享用,人人为我,我为人人



    ------------------------------------------
    除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
    BUY ME COFFEE
  • 相关阅读:
    Dotnet Core 跨平台GUI 开发实践
    微软的wasm 和 rust的wasm 方案对比
    全栈程序员的新玩具Rust(六)第一个WASM程序
    全栈程序员的新玩具Rust(五)第一个http服务器
    全栈程序员的新玩具Rust(四)第一个图形程序
    全栈程序员的新玩具Rust(三)板条箱
    全栈程序员的新玩具Rust(二)基本代码入门
    mac 上使用 zip 版的mysql
    磁盘 I/O 优化
    Netty WebSocket 开发
  • 原文地址:https://www.cnblogs.com/kkun/p/1393471.html
Copyright © 2011-2022 走看看