sqlite3处理写并发

前端之家收集整理的这篇文章主要介绍了sqlite3处理写并发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文地址:http://blog.csdn.net/zhaodezhong/article/details/7359738


sqlite3数据库是一个数据库一个文件,所以当多进程访问操作同一数据库时,即与操作同一文件一样,文件锁问题。 对同个数据库进行多进程同时读是允许的,但多进程同时写是不允许的,如果一个进程已经正在写,其他进程就会写失败。sqlite3返回信息就是"Database is locked",错误sqlITE_BUSY。 1、解决方法一 官方网站对这个问题是这个说的: When sqlite tries to access a file that is locked by another process,the default behavior is to return sqlITE_BUSY. You can adjust this behavior from C code using the sqlite3_busy_handler() or sqlite3_busy_timeout() API functions. 建议用sqlite3_busy_handler()或sqlite3_busy_timeout()在执行业务代码中加入相应的行为。 int sqlite3_busy_handler(sqlite3*,int(*)(void*,int),void*); int sqlite3_busy_timeout(sqlite3*,int ms); 两个函数只能用一个,用了一个,另一个就失效了。 2、解决方法加上一个循环判断。 while( 1 ) { if( sqlITE_OK != sqlite3_exec( myconn,sql,&m_sqlerr_msg) ) { if( strstr(m_sqlerr_msg,"database is locked") ) { sleep(1); continue; } break; } } 3、解决方法三 用信号量做PV操作 sem_p(semid,0); sqlite3_exec( myconn,&m_sqlerr_msg); sem_v(semid,0);

原文链接:https://www.f2er.com/sqlite/200841.html

猜你在找的Sqlite相关文章