在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; } }