在SQLite的使用过程中最常发生的数据库异常便是数据库被锁定了(SQLITE_BUSY或者SQLITE_LOCKED)。SQLite对于并发的处理机制是允许同一个进程的多个线程同时读取一个数据库,但是任何时刻只允许一个线程/进程写入数据库。所以必须要必须要对数据库的读写进行控制。 SQLite数据库本身提供了两个函数用来处理锁定情况: 复制代码 代码如下:
int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
int sqlite3_busy_timeout(sqlite3*, int ms); 使用这两个函数可以设定当发生数据库锁定的时候,调用什么函数来处理,以及设定锁定时的等待时间。 复制代码 代码如下:
void Lock() void UnLock() 当然我们也可以把等待时间设定为60秒,以免出现死等的现象。具体使用时可以按如下调用: 复制代码 代码如下:
//锁定数据库 //数据库解锁 经过测试这种方法的消耗要小于循环打开数据库的操作。
|