sqlite3 解决并发读写冲突的问题
1 #include "stdafx.h" 2 #include "sqlite3.h" 3 #include <iostream> 4 #include <process.h> 5 6 //sqllite 相关变量 7 sqlite3 *sql_db; 8 char *sql_ErrMsg; 9 int sql_rc; 10 sqlite3_stmt *sql_statement; 11 12 //写入重试客克服锁库的问题 13 void sql_insert_proc(char insert_state[400]) 14 { 15 while (1) 16 { 17 if (SQLITE_OK != sqlite3_exec(sql_db, insert_state, 0, 0, &sql_ErrMsg)) 18 { 19 if (strstr(sql_ErrMsg, "database is locked")) 20 { 21 printf("try again!\n"); 22 continue; 23 } 24 else 25 { 26 printf("other error! \n"); 27 break; 28 } 29 } 30 else 31 { 32 printf("ok insert !\n"); 33 break; 34 } 35 } 36 } 37 38 39 int _tmain(int argc, _TCHAR* argv[]) 40 { 41 sql_rc = sqlite3_open("C:\\SQLite\\test.db", &sql_db); 42 if (sql_rc){ 43 fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(sql_db)); 44 sqlite3_close(sql_db); 45 return(1); 46 } 47 printf("hello world!\n"); 48 getchar(); 49 int i; 50 51 52 for (i = 0; i < 10000; i++) 53 { 54 int step_result = SQLITE_BUSY; 55 char select_statement[400] = ""; 56 char selectname[25] = ""; 57 58 //读取重试克服锁库的问题 59 //SQLITE_ERROR、SQLITE_BUSY、SQLITE_MISUSE、SQLITE_ROW、SQLITE_DONE 60 while (step_result == SQLITE_BUSY) 61 { 62 memset(select_statement, 0, 400); 63 memset(selectname, 0, 25); 64 65 sprintf_s(select_statement, "select name from test order by id desc limit 1"); 66 67 sql_rc = sqlite3_prepare(sql_db, select_statement, -1, &sql_statement, NULL); 68 69 if (sql_rc != SQLITE_OK) 70 { 71 fprintf(stderr, "prepare error return code = %d\n", sql_rc); 72 } 73 74 step_result = sqlite3_step(sql_statement); 75 76 while (step_result == SQLITE_ROW) 77 { 78 strcpy_s(selectname, (char *)sqlite3_column_text(sql_statement, 0)); 79 step_result = sqlite3_step(sql_statement); 80 } 81 82 sqlite3_finalize(sql_statement); 83 } 84 85 printf("index = %d : %s\n", i, selectname); 86 } 87 88 /* 89 for (i = 0; i < 10000; i++) 90 { 91 char insert_statement[400] = ""; 92 sprintf_s(insert_statement, "insert into test (name) values('proc1 hello %d')", i); 93 printf("%s\n", insert_statement); 94 sql_insert_proc(insert_statement); 95 } 96 */ 97 98 99 sqlite3_close(sql_db); 100 return 0; 101 }
sqlite3 解决并发读写冲突的问题相关推荐
- mysql myisam 并发_MySQL的myisam解决并发读写解决方法
MySQL的myisam解决并发读写解决方法MyISAM在读操作占主导的情况下是很高效的.可一旦出现大量的读写并发,同InnoDB相比,MyISAM的效率就会直线下降,而且,MyISAM和InnoDB ...
- Nacos如何避免并发读写冲突问题?
Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表. 这样在更新的过程中,就不会对读实例列表的请求 ...
- makdir php 并发报错_PHP并发读写文件如何解决 - microtime
关于microtime()函数的问题我分别在程序的开头和结尾用microtime()函数取得当前时间,然后相减得到程序运行时间,在5.2版本的php上没问题,但是在5.3.5.4和5.5三个版本的ph ...
- php中并发读写文件冲突的解决方案(文件锁应用示例)
php中并发读写文件冲突的解决方案(文件锁应用示例) 参考文章: (1)php中并发读写文件冲突的解决方案(文件锁应用示例) (2)https://www.cnblogs.com/wellsoho/p ...
- golang中map并发读写问题及解决方法
这是一个创建于 2017-03-05 06:02:54 的文章,其中的信息可能已经有所发展或是发生改变. 一.map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:conc ...
- scanf_s 发送访问冲突_程序员如何解决并发冲突的难题?
作者 | 羽生结弦 责编 | 胡雪蕊 出品 | CSDN(ID: CSDNnews) 在大多数的应用中都会出现客户端同时发送多个请求对同一条数据就行修改,这个时候就会出现并发冲突.我们一般的做法会有如 ...
- 程序员如何解决并发冲突的难题?
作者 | 羽生结弦 责编 | 胡雪蕊 出品 | CSDN(ID: CSDNnews) 在大多数的应用中都会出现客户端同时发送多个请求对同一条数据就行修改,这个时候就会出现并发冲突.我们一般的做法会有如 ...
- Xilinx伪双口RAM实现同步FIFO(解决读写冲突)
一.伪双端口RAM配置 关于创建和配置IP,可以参考我的另一篇文章:Vivado 双口RAM IP核的使用,不同之处只是在于本文使用的伪双端口RAM的写端口和读端口都加了使能信号,也即没有选择始终使能 ...
- Gox语言中使用读写锁解决并发冲突以及如何实现线程同步归并-GX22
Gox语言中,除了可以直接使用Go语言中的通道对象(chan)之外,也直接引入了Go语言标准库中的sync包,因此可以直接使用共享锁Mutex对象或者读写锁RWMutex对象来处理并发操作中共享数据安 ...
最新文章
- kali linux网络配置
- Python基础03-运算符
- 百度宣布:搜索业务总裁向海龙离职,另回购10亿美元股份
- CTO 说了,如果发现谁用 kill -9 关闭程序就开除
- pygame 笔记-8 背景音乐子弹音效
- .net framework 4中SpinLock和lock的区别
- 配置sctp_5G站点网优参数配置指导书
- 申请成功,庆祝一下。
- 微信小程序开发3——事件处理
- jzoj3500-物语【最短路】
- python迭代器创建序列_Python 中迭代器与生成器实例详解
- linux初始化TCP服务失败,深入Linux系统追踪TCP初始化
- java基础的正则表达式
- css3 实现图片旋转
- 移动html5 滑动 zepto,移动端使用zepto编写的滑动事件
- 安装虚拟光驱Daemon Tool 安装失败
- windows下安装redis详细教程
- 删除windows搜索框中的搜索记录
- Oracle数据更新
- 2021年R1快开门式压力容器操作考试题及R1快开门式压力容器操作模拟考试