cococos 2 d-xにおけるSqlite 3トランザクション(Transaction)アクション
2129 ワード
sqlite 3では、トランザクションはインタフェースを抽出していません.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 );
トランザクション・オペレーションを2つの関数にカプセル化し、開始と終了時に呼び出します.データベースを閉じたときにトランザクションが終了しない場合は、デフォルトではロールバックされます.
関数の定義と実装は次のとおりです.
/*
* , 。
*
* 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
" , 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
" , 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
" , result, errMsg );
return result;
}
}
このブログは阿修羅道から出ています.転載は出典を明記してください.http://blog.csdn.net/fansongy/article/details/8966730