关于SQLite3 Database is Locked 的一点处理技巧

关于SQLite Database is Locked 的一点处理技巧  

第一次玩SQLite,并且深深的喜欢上了它的小巧,便捷,灵活……
好吧说主题,由于SQLite 过于简单,所以它的并发性确实让人抓狂,今天就碰到了,并且无所适从,因为刚开始觉得,我要操作同一数据库中的多个表,并且在不同的地方,所以感觉见多个数据库链接很正常,所以就做了,然后就是Database is Locked。(发现这个问题实在VS下调试时报的)。并且我一边用数据库管理工具操作,一边在写C#代码处理数据库,也包同样的错误,所以……
也就是这样:
//同时有两个数据库链接,此时分别对同一个数据库操作时就会出现这个问题
SQLiteConnection conn1;
SQLiteConnection conn2;

最后想到了一种方法,将数据库链接变量设为:static。
想法来自 设计模式,这是一门睡得天晕地暗的课,20多种设计模式吧(不知道这个数据记得对不对),就会这一个,单件,单件是什么,自己读娘或者看《大话设计模式》这本书吧。
具体就是,将数据库链接变量(以后都用conn)设为static即可。
C#代码:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SQLite;//应如的数据库驱动,去官网下,

//注意.net,vs,SQLite,windows位数这些东西,当时搞死我了 namespace ConsoleApplication1 { class SQLite {

string connectString; static SQLiteConnection conn; static bool isopen=false;//同样是Static,标记数据库是否已经打开 public SQLite() { if (!isopen) { connectString = @"Data Source=E:\inf.db;Pooling=true;FailIfMissing=false"; conn = new SQLiteConnection(connectString); conn.Open(); isopen = true; } } public SQLiteConnection getConn()//通过这个函数得到数据库链接变量 { return conn; }

}

}

//此时这让做如下操作,就没有任何问题了

SQLite sql=new SQLite();

 SQLiteConnection conn1=sql.getConn();

SQLiteConnection conn2=sql.getConn();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值