作者:飞天美术_888_265 | 来源:互联网 | 2023-05-18 09:39
我是在linux下用c写的程序,用root用户执行。我的程序中每1秒左右就需要向sqlite数据库中插入1条记录,每次大概插入1000条左右就会导致数据库被锁定databaseislocke
我是在linux下用c写的程序,用root用户执行。
我的程序中每1秒左右就需要向sqlite数据库中插入1条记录,每次大概插入1000条左右就会导致数据库被锁定"database is locked",请问达人如何解决?
注:问题解决了另外给分!
14 个解决方案
sqlite3_busy_timeout( db, 200 ); //设置数据库超时等待时间200MS
这么频繁的插入,最好是每一分钟,使用事务方式将一分钟内的记录一起插入.
我也正在用SQLite做点东西
受教
除了“使用事务方式将一分钟内的记录一起插入”方式,还有其他方法么?
好像会遇到一些大量的频繁的写数据时,数据库会有问题。
你试试没操作一次都把下面这些东西关闭
stmt.close();
rset.close();
conn.close();
仔细检查 conn.Close(); !
100%解决问题!
conn不关应该没事吧,不过不要重复的open应该没事吧,开阿关阿更浪费资源,1秒写一次应该不会有问题的
由检查conn.Close()的返回值想到一个问题:
如果sqlite3_finalize()返回SQLITE_BUSY,那这时sqlite3 *p_stmt资源释放了吗?
单线程不会有锁定的问题。。。
肯定你是采用了多线程,每个线程打开一个connection。如果后一个线程访问时,前一个线程正在执行插入操作,所以就有问题了。
一个时间只能有一个query 操作数据库的,多线程的时候要特别注意