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[])
  14. {
  15. while ()
  16. {
  17. if (SQLITE_OK != sqlite3_exec(sql_db, insert_state, , , &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. int _tmain(int argc, _TCHAR* argv[])
  39. {
  40. sql_rc = sqlite3_open("C:\\SQLite\\test.db", &sql_db);
  41. if (sql_rc){
  42. fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(sql_db));
  43. sqlite3_close(sql_db);
  44. return();
  45. }
  46. printf("hello world!\n");
  47. getchar();
  48. int i;
  49.  
  50. for (i = ; i < ; i++)
  51. {
  52. int step_result = SQLITE_BUSY;
  53. char select_statement[] = "";
  54. char selectname[] = "";
  55.  
  56. //读取重试克服锁库的问题
  57. //SQLITE_ERROR、SQLITE_BUSY、SQLITE_MISUSE、SQLITE_ROW、SQLITE_DONE
  58. while (step_result == SQLITE_BUSY)
  59. {
  60. memset(select_statement, , );
  61. memset(selectname, , );
  62.  
  63. sprintf_s(select_statement, "select name from test order by id desc limit 1");
  64.  
  65. sql_rc = sqlite3_prepare(sql_db, select_statement, -, &sql_statement, NULL);
  66.  
  67. if (sql_rc != SQLITE_OK)
  68. {
  69. fprintf(stderr, "prepare error return code = %d\n", sql_rc);
  70. }
  71.  
  72. step_result = sqlite3_step(sql_statement);
  73.  
  74. while (step_result == SQLITE_ROW)
  75. {
  76. strcpy_s(selectname, (char *)sqlite3_column_text(sql_statement, ));
  77. step_result = sqlite3_step(sql_statement);
  78. }
  79.  
  80. sqlite3_finalize(sql_statement);
  81. }
  82.  
  83. printf("index = %d : %s\n", i, selectname);
  84. }
  85.  
  86. /*
  87. for (i = 0; i < 10000; i++)
  88. {
  89. char insert_statement[400] = "";
  90. sprintf_s(insert_statement, "insert into test (name) values('proc1 hello %d')", i);
  91. printf("%s\n", insert_statement);
  92. sql_insert_proc(insert_statement);
  93. }
  94. */
  95.  
  96. sqlite3_close(sql_db);
  97. return ;
  98. }

sqlite3 解决并发读写冲突的问题的更多相关文章

  1. php中并发读写文件冲突的解决方案

    在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...

  2. php中并发读写文件冲突的解决方案(文件锁应用示例)

    PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...

  3. 分享十:php中并发读写文件冲突的解决方案

    对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果并发高,在我们对文件进行读写操作时,很有可能多个进程对进一文件进行操作,如果这时不对文件的访问进行相 ...

  4. Xml文件并发读写的解决方法

    之前对xml的操作大都是通过XmlDocument对象来进行,但是这样的情况对于没有并发的是非常合适的,最近遇到了并发读写xml文件的情况.通过文件流来操作能解决大部分的并发情况,对于极端的情况会有问 ...

  5. Sqlite3并发读写注意事项

    最近项目中涉及到sqlite并发读写的问题,参考一些文档并结合自己的实践,对sqlite3并发问题总结了几点: sqlite3的锁及事务类型 sqlite3总共有三种事务类型:BEGIN [DEFER ...

  6. golang中map并发读写问题及解决方法

    一.map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:concurrent map read and map write的错误 如下代码很容易就出现map并发读写问题 ...

  7. 并发读写缓存实现机制(一):为什么ConcurrentHashMap可以这么快?

    大家都知道ConcurrentHashMap的并发读写速度很快,但为什么它会这么快?这主要归功于其内部数据结构和独特的hash运算以及分离锁的机制.做游戏性能很重要,为了提高数据的读写速度,方法之一就 ...

  8. EntityFramework Core解决并发详解

    前言 对过年已经无感,不过还是有很多闲暇时间来学学东西,这一点是极好的,好了,本节我们来讲讲EntityFramewoek Core中的并发问题. 话题(EntityFramework Core并发) ...

  9. 【漫画】CAS原理分析!无锁原子类也能解决并发问题!

    本文来源于微信公众号[胖滚猪学编程].转载请注明出处 在漫画并发编程系统博文中,我们讲了N篇关于锁的知识,确实,锁是解决并发问题的万能钥匙,可是并发问题只有锁能解决吗?今天要出场一个大BOSS:CAS ...

随机推荐

  1. ANSI、ASCII、Unicode和UTF-8编码

    来自:http://blog.163.com/yang_jianli/blog/static/161990006201371451851274/ --------------------------- ...

  2. git add 文档

    GIT-ADD(1) Git Manual GIT-ADD(1) NAME git-add - Add file contents to the index SYNOPSIS git add [-n] ...

  3. Docker容器进入的4种方式(转)

    这个文章不错,几种方式及使用范围都讲得清楚. 另外,还有一个文章说了为什么docker中并不合适ssh服务安装的情况. 我现在也是用第四种方式, docker exec -it [docker容器ID ...

  4. React Native - 2 控件Flexbox

    *强烈建议使用Genymotion模拟器,比AVD速度快,功能强大.   1. flexDirection Flexbox是连续布局,它有主轴(primary axis)和交叉轴(cross axis ...

  5. 自定义的一个JDBC工具类

    package JDBCutils; import java.io.File;import java.io.FileInputStream;import java.sql.Connection;imp ...

  6. 开源的图像滤镜库----for Android

    1.GPUImage for Android(推荐使用) GPUImage基于OpenGL实现的各种各样图像滤镜(图像处理)效果,多达50多种, idea源于GPUImage for iOS,基本囊括 ...

  7. D - Interesting Calculator 【数值型BFS+优先队列】

    There is an interesting calculator. It has 3 rows of buttons. Row 1: button 0, 1, 2, 3, ..., 9. Pres ...

  8. CSU 1337 搞笑版费马大定理【优化枚举】

    费马大定理:当n>2时,不定方程an+bn=cn没有正整数解.比如a3+b3=c3没有正整数解.为了活跃气氛,我们不妨来个搞笑版:把方程改成a3+b3=c3,这样就有解了,比如a=4, b=9, ...

  9. 遇见requestAnimationFrame

    今天,在读javascript异步编程的js事件深入理解部分的时候,了解到了requestAnimationFrame 这个api,在这里记录一下. 原文: setTimeout 和 setInter ...

  10. 洛谷——P2556 [AHOI2002]黑白图像压缩

    P2556 [AHOI2002]黑白图像压缩 题目描述 选修基础生物基因学的时候, 小可可在家里做了一次图像学试验. 她知道:整个图像其实就是若干个图像点(称作像素)的序列,假定序列中像素的个数总是 ...