加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 创业 > 经验 > 正文

C语言SQLite3事务和锁的操作实例

发布时间:2020-12-30 22:42:31 所属栏目:经验 来源:网络整理
导读:本篇章节讲解C语言SQLite3事务和锁的操作。供大家参考研究具体如下: #include stdio.h#include sqlite3.hstatic int lib_get_value_callback(void *buf,int argc,char *argv[],char *column_name[]){ printf("argc:%d,%s argv[0]:%s,%s argv[1]:%

本篇章节讲解C语言SQLite3事务和锁的操作。分享给大家供大家参考,具体如下:

#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]:%sn",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,...)
{
  int res;
  va_list ap;
  va_start(ap,format);
  res = war_vsnprintf(str,ap);
  va_end(ap);
  return res;
}
#define CHECK_RC(rc,szInfo,szErrMsg,db) if(rc!=SQLITE_OK)

      {printf("%s error!n",szInfo);

      printf("%sn",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 succeedn");
    }
   else{
    printf("open failn");
    }
  //char *szSql ="SELECT type,value FROM tr WHERE id=3";
  //char *szSql = "insert into tr values(null,-1,'','false',1,'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,&szErrMsg);
  //CHECK_RC(rc,"create table",db);
  for(i = 1;i <= 30;i++)
  {
  /*begin*/
   rc = sqlite3_exec(db,"BEGIN EXCLUSIVE",NULL,&szErrMsg);
   CHECK_RC(rc,"begin",db);
  war_snprintf(szSql,sizeof(szSql),"insert into tr values(null,%d,'jjhh','true','string','')",i);
  rc = sqlite3_exec(db,szSql,lib_get_value_callback,&szErrMsg);
  CHECK_RC(rc,"insert values",db);
  if((rc == SQLITE_OK)&&((i%2)==0))
    {
    rc=sqlite3_exec(db,"COMMIT",&szErrMsg);
    CHECK_RC(rc,db);
    war_snprintf(szSql,"SELECT id,value FROM tr WHERE pid=%d and name='%s'",i,"jjhh");
       rc = sqlite3_exec(db,&szErrMsg);
       CHECK_RC(rc,"query values",db);
    }
  else
    {
    rc=sqlite3_exec(db,"ROLLBACK",db);
    }
  sleep(5);
  }
  sqlite3_close(db);
  printf("happy everyday!");
  return 0;
}

希望本文所述对大家C语言程序设计有所帮助。

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读