欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言SQLite3事務(wù)和鎖的操作實(shí)例

 更新時(shí)間:2017年07月27日 10:39:09   作者:lifan5  
這篇文章主要介紹了C語言SQLite3事務(wù)和鎖的操作,結(jié)合完整實(shí)例形式分析了C語言針對(duì)SQLite3數(shù)據(jù)庫的事務(wù)與鎖相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了C語言SQLite3事務(wù)和鎖的操作。分享給大家供大家參考,具體如下:

#include <stdio.h>
#include <sqlite3.h>
static int lib_get_value_callback(void *buf, int argc, char *argv[], char *column_name[])
{
  printf("argc:%d,%s argv[0]:%s,%s argv[1]:%s\n",argc,column_name[0],argv[0],column_name[1],argv[1]);
  return 0;
}
/*!
 * \fn war_snprintf.
 * \brief the functions snprintf produce output according to a format.
 * \param str: the output buffer.
 * \param size: size allow writting to buffer
 * \param format: format string
 * \param ap: variable list
 * \return success: size written to buffer ; fail or output longer than size: -1
 */
int war_vsnprintf(char *str, size_t size, const char *format, va_list ap)
{
  int res;
  res = vsnprintf(str, size, format, ap);
  if (res >= size) {
  //tr_log(LOG_ERROR, "[v]snprintf failed or output longer than buffer!");
  printf("[v]snprintf failed or output longer than buffer!\n");
    return -1;
  } else
    return res;
}
/*!
 * \fn war_snprintf.
 * \brief the functions snprintf produce output according to a format.
 * \param str: the output buffer.
 * \param size: size allow writting to buffer
 * \param format: format string
 * \return success: size written to buffer ; fail: -1
 */
int war_snprintf(char *str, size_t size, const char *format, ...)
{
  int res;
  va_list ap;
  va_start(ap, format);
  res = war_vsnprintf(str, size, format, ap);
  va_end(ap);
  return res;
}
#define CHECK_RC(rc,szInfo,szErrMsg,db) if(rc!=SQLITE_OK)\
      {printf("%s error!\n",szInfo);\
      printf("%s\n",szErrMsg);\
      sqlite3_free(szErrMsg);\
      sqlite3_close(db);\
      return 0;}
int main(int argc, char * argv[])
{
  sqlite3 *db;
  char *dbPath="tr.db";
  char *szErrMsg = 0;
  int rc = 0;
     rc= sqlite3_open(dbPath, &db);
   if(rc == SQLITE_OK){
    printf("open succeed\n");
    }
   else{
    printf("open fail\n");
    }
  //char *szSql ="SELECT type, value FROM tr WHERE id=3";
  //char *szSql = "insert into tr values(null,-1,'','false','false',0,'',1,0,'','node','')";
  char szSql[128];
  int i = 1;
  //char *Sql = "CREATE TABLE tr(id INTEGER PRIMARY KEY,pid INTEGER DEFAULT -1,name TEXT NOT NULL COLLATE NOCASE, rw varchar(5) DEFAULT 'true',getc varchar(5) DEFAULT 'false',noc INTEGER DEFAULT 0,nocc charchar(3) DEFAULT '',nin INTEGER DEFAULT 1,il INTEGER DEFAULT 0,acl varchar(255) DEFAULT '',type varchar(16) DEFAULT 'node',value TEXT DEFAULT NULL,UNIQUE(pid,name));";
  //rc=sqlite3_exec(db,Sql,0,0,&szErrMsg);
  //CHECK_RC(rc,"create table",szErrMsg,db);
  for(i = 1;i <= 30;i++)
  {
  /*begin*/
   rc = sqlite3_exec(db,"BEGIN EXCLUSIVE", NULL,NULL, &szErrMsg);
   CHECK_RC(rc,"begin",szErrMsg,db);
  war_snprintf(szSql, sizeof(szSql), "insert into tr values(null,%d,'jjhh','true','false',0,'',1,0,'','string','')", i);
  rc = sqlite3_exec(db,szSql, lib_get_value_callback, 0, &szErrMsg);
  CHECK_RC(rc,"insert values",szErrMsg,db);
  if((rc == SQLITE_OK)&&((i%2)==0))
    {
    rc=sqlite3_exec(db,"COMMIT", NULL,NULL, &szErrMsg);
    CHECK_RC(rc,"insert values",szErrMsg,db);
    war_snprintf(szSql, sizeof(szSql), "SELECT id, value FROM tr WHERE pid=%d and name='%s'", i,"jjhh");
       rc = sqlite3_exec(db,szSql, lib_get_value_callback, 0, &szErrMsg);
       CHECK_RC(rc,"query values",szErrMsg,db);
    }
  else
    {
    rc=sqlite3_exec(db,"ROLLBACK", NULL,NULL, &szErrMsg);
    CHECK_RC(rc,"insert values",szErrMsg,db);
    }
  sleep(5);
  }
  sqlite3_close(db);
  printf("happy everyday!");
  return 0;
}

希望本文所述對(duì)大家C語言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C語言實(shí)現(xiàn)會(huì)員管理系統(tǒng)

    C語言實(shí)現(xiàn)會(huì)員管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)會(huì)員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C/C++哈希表優(yōu)化LeetCode題解997找到小鎮(zhèn)的法官

    C/C++哈希表優(yōu)化LeetCode題解997找到小鎮(zhèn)的法官

    這篇文章主要為大家介紹了C/C++哈希表優(yōu)化題解997找到小鎮(zhèn)的法官示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 淺談C++ 虛函數(shù)分析

    淺談C++ 虛函數(shù)分析

    這篇文章主要介紹了淺談C++ 虛函數(shù)分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 使用C語言調(diào)用luajit的方法詳解

    使用C語言調(diào)用luajit的方法詳解

    C語言是一種非常流行的編程語言,而Lua是一種基于C語言開發(fā)的腳本語言,在Lua的各種實(shí)現(xiàn)中,luajit也是其中一種非常流行的實(shí)現(xiàn),在本文中,我將為大家介紹如何使用C語言調(diào)用luajit,并且詳細(xì)介紹如何傳入?yún)?shù),傳入結(jié)構(gòu)體參數(shù),以及獲取返回值
    2023-11-11
  • C語言菜鳥基礎(chǔ)教程之加法

    C語言菜鳥基礎(chǔ)教程之加法

    C語言中運(yùn)算符和表達(dá)式數(shù)量之多, 在高級(jí)語言中是少見的。正是豐富的運(yùn)算符和表達(dá)式使C語言功能十分完善。 這也是C語言的主要特點(diǎn)之一。今天我們來看看加法運(yùn)算
    2017-10-10
  • C++逐步介紹日期類的使用

    C++逐步介紹日期類的使用

    下面小編就為大家?guī)硪黄狢++實(shí)現(xiàn)日期類(Date類)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2022-07-07
  • C++簡明圖解this指針的使用

    C++簡明圖解this指針的使用

    this 指針在C++類和對(duì)象中是個(gè)很方便實(shí)用的關(guān)鍵字,可以簡化對(duì)象成員屬性的調(diào)用,使代碼表達(dá)的含義更加準(zhǔn)確;在之前的學(xué)習(xí)中我們都可以判斷變量所占內(nèi)存空間大小,那么我們創(chuàng)建的類對(duì)象所占的內(nèi)存空間怎么計(jì)算呢?想知道this的妙用和類對(duì)象占用的內(nèi)存空間就來跟我學(xué)習(xí)吧
    2022-06-06
  • OpenGL實(shí)現(xiàn)貝塞爾曲線或曲面

    OpenGL實(shí)現(xiàn)貝塞爾曲線或曲面

    這篇文章主要為大家詳細(xì)介紹了OpenGL實(shí)現(xiàn)貝塞爾曲線或曲面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Linux下控制(統(tǒng)計(jì))文件的生成的C代碼實(shí)現(xiàn)

    Linux下控制(統(tǒng)計(jì))文件的生成的C代碼實(shí)現(xiàn)

    這篇文章主要介紹了Linux下控制(統(tǒng)計(jì))文件的生成的C代碼實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-01-01
  • C++實(shí)現(xiàn)二維圖形的打印

    C++實(shí)現(xiàn)二維圖形的打印

    大家好,本篇文章主要講的是C++實(shí)現(xiàn)二維圖形的打印,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02

最新評(píng)論