您的位置:首页 > 数据库

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

2014-12-02 15:07 986 查看

关于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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息