sqlite3事务和锁的实例

前端之家收集整理的这篇文章主要介绍了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]:%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,...)
{
    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("%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',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;
}


#include <stdio.h>
#include <sqlite3.h>

static int lib_get_value_callback(void *buf,char * argv[])
{
  
    sqlite3 *db;
    char *dbPath="tr.db";
    char *szErrMsg = 0;
    int rc = 0;

     rc= sqlite3_open(dbPath,'')";
    char szsql[128];
    int i = 1;

   

    //char *sql = "CREATE TABLE tr(id INTEGER PRIMARY KEY,db);
	 
    war_snprintf(szsql,'hhjj',db);
	
    if((rc == sqlITE_OK)&&((i%2)==0))
		{
		rc=sqlite3_exec(db,db);
		
		war_snprintf(szsql,"hhjj");
              rc = sqlite3_exec(db,db);
		}
	else
		{
		rc=sqlite3_exec(db,db);
		}
	sleep(5);
    }
    
    //sleep(60);
    sqlite3_close(db);
    printf("happy everyday!");
    return 0;
}
同时运行

猜你在找的Sqlite相关文章