加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite3的事务功能实例

发布时间:2020-12-12 20:09:21 所属栏目:百科 来源:网络整理
导读:代码功能: 从sql.txt中读出SQL语句,并一一执行,若有一条执行失败,则所有执行全部不生效。回滚到执行前的状态。 #include stdio.h#include sqlite3.h#define SQL_FILE "./sql.txt"int commitSQL(sqlite3 *db){int ret=0; FILE *fp; char buf[100]={0};cha

代码功能:

从sql.txt中读出SQL语句,并一一执行,若有一条执行失败,则所有执行全部不生效。回滚到执行前的状态。


#include <stdio.h>
#include <sqlite3.h>
#define SQL_FILE "./sql.txt"
int commitSQL(sqlite3 *db)
{
	int ret=0;         
	FILE *fp;          

	char buf[100]={0};
	char *errmsg = 0;
	char **azResult;
	int i,nRow=0,nColumn=0;
	fp = fopen(SQL_FILE,"r");
	if(NULL == fp)     
		return -1;     
	ret = sqlite3_exec(db,"BEGIN EXCLUSIVE",NULL,&errmsg);    
	if(ret != SQLITE_OK)
	{
		printf("ret = %d,BEGIN EXCLUSIVE: %s",ret,errmsg);
	}
	while( NULL != fgets(buf,100,fp))
	{                       
		printf("%sn",buf);
		if(0 == strncmp(buf,"select",6))
		{
			ret += sqlite3_get_table(db,buf,&azResult,&nRow,&nColumn,&errmsg);
			if(ret != SQLITE_OK)
			{
				printf("ret = %d,search table fail: %sn",errmsg);
			}
			printf("row:%d column=%dn",nRow,nColumn);
			for(i=nColumn;i<(nRow+1)*nColumn;i++)
			{
				printf("azResult[%d] = %sn",i,azResult[i]);
			}
			sqlite3_free_table(azResult);
		}
		else
			ret += sqlite3_exec(db,&errmsg); 
		if(SQLITE_OK != ret)
		{
			printf("ret = %d,sql: %sn",errmsg);
			break;
		}
	}      
	if(ret == SQLITE_OK)
	{
		ret=sqlite3_exec(db,"COMMIT",&errmsg);
		if(ret != SQLITE_OK)
		{
			printf("ret = %d,COMMIT: %sn",errmsg);
		}
	}
	else
	{
		ret=sqlite3_exec(db,"ROLLBACK",ROLLBACK: %sn",errmsg);
		}
		sqlite3_free(errmsg);
		fclose(fp); 
		return -2;
	}
	sqlite3_free(errmsg);
	fclose(fp); 

	return ret;
}

int main()
{
	sqlite3 *db;
	char *dbPath="test.db";  
	int ret = 0;        
	ret = sqlite3_open(dbPath,&db);  
	if(ret == SQLITE_OK)
	{  
		printf("open succeedn");      
	}  
	else
	{              
		printf("open failn");         
	}  
	ret = commitSQL(db);
	printf("ret = %dn",ret);

	sqlite3_close(db);
}

(编辑:李大同)

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

    推荐文章
      热点阅读