cocos2d-x 中 Sqlite3 事务(Transaction)操作

 

在sqlite3中,事务是没提炼出一个接口。就只好写到sql语句中,不过倒是不太麻烦。

 

sqlite3_exec ( m_pDB , "begin transaction" , 0 , 0 , & errMsg );

sqlite3_exec ( m_pDB , "commit transaction" , 0 , 0 , & errMsg );

sqlite3_exec ( m_pDB , "rollback transaction" , 0 , 0 , &errMsg );


我将事务操作封装到两个函数中,开始和结束时调用。如果关闭数据库时未结束事务, 默认情况是 回滚。

 

函数的定义和实现如下:

 

/*
	 *开始一个事物,要在完成事物后调用结束。
	 *
	 *返回为SQLITE_XXX标准宏
	 */
	 int beginTransaction();

	
	/*
	 *结束一个事务。
	 *参数为先前执行sql语句的返回值,即标志成功还是要回滚。
	 *
	 *返回为SQLITE_XXX标准宏
	 */
	 int endTransaction(int sqlResult);

 

 

int DataUtil::beginTransaction()
{
	char msg[ERR_LENGTH] = {0};
	char* errMsg = msg;
	int result = sqlite3_exec ( m_pDB , "begin transaction" , 0 , 0 , & errMsg );
	if(result != SQLITE_OK ) 
		CCLog( "开始事务记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); 
	return result;
}

int DataUtil::endTransaction(int sqlResult)
{
	if (sqlResult ==SQLITE_OK)
	{
		char msg[ERR_LENGTH] = {0};
		char* errMsg = msg;
		int result = sqlite3_exec ( m_pDB , "commit transaction" , 0 , 0 , & errMsg );
		if(result != SQLITE_OK ) 
			CCLog( "提交事务记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); 
		return result;
	}
	else
	{
		char msg[ERR_LENGTH] = {0};
		char* errMsg = msg;
		int result = sqlite3_exec ( m_pDB , "rollback transaction" , 0 , 0 , & errMsg );
		if(result != SQLITE_OK ) 
			CCLog( "回滚事务记录失败,错误码:%d ,错误原因:%s\n" , result, errMsg ); 
		return result;
	}
}


本篇博客出自阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/8966730

 

 

 

 

posted @ 2013-05-23 20:21  javawebsoa  Views(228)  Comments(0Edit  收藏  举报