C語言SQLite3事務(wù)和鎖的操作實例
更新時間:2017年07月27日 10:39:09 作者:lifan5
這篇文章主要介紹了C語言SQLite3事務(wù)和鎖的操作,結(jié)合完整實例形式分析了C語言針對SQLite3數(shù)據(jù)庫的事務(wù)與鎖相關(guān)操作技巧,需要的朋友可以參考下
本文實例講述了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;
}
希望本文所述對大家C語言程序設(shè)計有所幫助。
相關(guān)文章
C++中declspec(dllexport)和declspec(dllimport)?的用法介紹
這篇文章介紹了C++中declspec(dllexport)和declspec(dllimport)?的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
C語言實現(xiàn)簡單的學(xué)生學(xué)籍管理系統(tǒng)
這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的學(xué)生學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07
淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別
這篇文章主要介紹了淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Visual Studio Code配置C/C++開發(fā)環(huán)境的教程圖解
這篇文章主要介紹了Visual Studio Code配置C/C++開發(fā)環(huán)境的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06

