小代码大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


【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架