如何实现C语言中SQLite3事务与锁的具体操作示例?

2026-05-20 01:341阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计983个文字,预计阅读时间需要4分钟。

如何实现C语言中SQLite3事务与锁的具体操作示例?

本文实例讲述了C语言使用SQLite3进行事务和锁的操作。以下是一些操作要点:

1. 创建数据库和表c#include

int main() { sqlite3 *db; char *err_msg=0; int rc=sqlite3_open(test.db, &db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; }

char *sql=CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY, name TEXT);; rc=sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc !=SQLITE_OK) { fprintf(stderr, SQL 错误: %s\n, err_msg); sqlite3_free(err_msg); }

sqlite3_close(db); return 0;}

2. 插入数据cint main() { sqlite3 *db; char *err_msg=0; int rc=sqlite3_open(test.db, &db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; }

char *sql=INSERT INTO test (name) VALUES ('张三');; rc=sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc !=SQLITE_OK) { fprintf(stderr, SQL 错误: %s\n, err_msg); sqlite3_free(err_msg); }

sqlite3_close(db); return 0;}

3. 事务操作cint main() { sqlite3 *db; char *err_msg=0; int rc=sqlite3_open(test.db, &db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; }

sqlite3_exec(db, BEGIN TRANSACTION;, 0, 0, &err_msg); if (err_msg) { fprintf(stderr, 事务开始失败: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

char *sql=INSERT INTO test (name) VALUES ('李四');; rc=sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc !=SQLITE_OK) { fprintf(stderr, SQL 错误: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

sqlite3_exec(db, COMMIT;, 0, 0, &err_msg); if (err_msg) { fprintf(stderr, 事务提交失败: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

sqlite3_close(db); return 0;}

4. 锁操作cint main() { sqlite3 *db; char *err_msg=0; int rc=sqlite3_open(test.db, &db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; }

sqlite3_exec(db, BEGIN EXCLUSIVE;, 0, 0, &err_msg); if (err_msg) { fprintf(stderr, 独占锁失败: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

char *sql=UPDATE test SET name='王五' WHERE id=1;; rc=sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc !=SQLITE_OK) { fprintf(stderr, SQL 错误: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

sqlite3_exec(db, COMMIT;, 0, 0, &err_msg); if (err_msg) { fprintf(stderr, 事务提交失败: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

sqlite3_close(db); return 0;}

本文实例讲述了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]:%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语言程序设计有所帮助。

如何实现C语言中SQLite3事务与锁的具体操作示例?

本文共计983个文字,预计阅读时间需要4分钟。

如何实现C语言中SQLite3事务与锁的具体操作示例?

本文实例讲述了C语言使用SQLite3进行事务和锁的操作。以下是一些操作要点:

1. 创建数据库和表c#include

int main() { sqlite3 *db; char *err_msg=0; int rc=sqlite3_open(test.db, &db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; }

char *sql=CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY, name TEXT);; rc=sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc !=SQLITE_OK) { fprintf(stderr, SQL 错误: %s\n, err_msg); sqlite3_free(err_msg); }

sqlite3_close(db); return 0;}

2. 插入数据cint main() { sqlite3 *db; char *err_msg=0; int rc=sqlite3_open(test.db, &db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; }

char *sql=INSERT INTO test (name) VALUES ('张三');; rc=sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc !=SQLITE_OK) { fprintf(stderr, SQL 错误: %s\n, err_msg); sqlite3_free(err_msg); }

sqlite3_close(db); return 0;}

3. 事务操作cint main() { sqlite3 *db; char *err_msg=0; int rc=sqlite3_open(test.db, &db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; }

sqlite3_exec(db, BEGIN TRANSACTION;, 0, 0, &err_msg); if (err_msg) { fprintf(stderr, 事务开始失败: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

char *sql=INSERT INTO test (name) VALUES ('李四');; rc=sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc !=SQLITE_OK) { fprintf(stderr, SQL 错误: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

sqlite3_exec(db, COMMIT;, 0, 0, &err_msg); if (err_msg) { fprintf(stderr, 事务提交失败: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

sqlite3_close(db); return 0;}

4. 锁操作cint main() { sqlite3 *db; char *err_msg=0; int rc=sqlite3_open(test.db, &db); if (rc) { fprintf(stderr, 无法打开数据库: %s\n, sqlite3_errmsg(db)); return 1; }

sqlite3_exec(db, BEGIN EXCLUSIVE;, 0, 0, &err_msg); if (err_msg) { fprintf(stderr, 独占锁失败: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

char *sql=UPDATE test SET name='王五' WHERE id=1;; rc=sqlite3_exec(db, sql, 0, 0, &err_msg); if (rc !=SQLITE_OK) { fprintf(stderr, SQL 错误: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

sqlite3_exec(db, COMMIT;, 0, 0, &err_msg); if (err_msg) { fprintf(stderr, 事务提交失败: %s\n, err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; }

sqlite3_close(db); return 0;}

本文实例讲述了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]:%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语言程序设计有所帮助。

如何实现C语言中SQLite3事务与锁的具体操作示例?