آشنایی با Transaction در Android

فرض کنید در برنامه اندروید مورد نظر ما دو جدول به نامهای A و B داریم که پس از ثبت رکورد در جدول A رکورد یا رکوردهای مرتبط با آن در جدول B ثبت خواهند شد. برای ما ارتباط بین رکوردهای ثبت شده در این جداول مهم است یعنی در صورتی که ثبت رکورد در جدول A موفقیت آمیز باشد اما ثبت رکورد در جدول B با شکست مواجه شود، باید مقادیر ثبت شده در جدول A هم ملغی شود. در این مورد باید از Transaction در برنامه استفاده کنیم.

برای استفاده از Transaction در برنامه های اندروید باید از متدهای کلاس SQLiteDatabase استفاده کنید. شبه کد زیر را همه آنچه را که باید در رابطه با Transaction بدانید به شما نشان داده است:

DbManager dbHelper=new DbManager(this);
SQLiteDatabase db= dbHelper.getWriteableDatabase();
db.beginTransaction();
try{
	//Insert into Table A
	//Insert into Table B
	Db.setTransactionSuccessful();
} catch{
//Error in insert data
} finally{
	Db.endTransaction();
}

در این مثال ابتدا یک شی از کلاس DbManager تعریف شده است. کلاس DbManager پیاده سازی کلاس SQLiteHelper است. سپس با فراخوانی متد getWriteableDatabase یک شی SQLiteDatabase به نام db ساخته شده است.
فراخوانی متد beginTransaction باعث می شود که Transaction آغاز شود. پس از ثبت اطلاعات مورد نیاز در دو جدول A و B با فراخوانی متد setTransactionSuccessfull به شی SQLiteDatabase اعلام می کنیم که مجموعه عملیات مورد نظر که در Transaction قرار گرفته اند با موفقیت انجام شده است. در بخش finally متد endTransaction فراخوانی شده است که با فراخوانی آن پایان Transaction اعلام می شد. در صورت رخ دادن هر خطایی در بخش try متد setTransactionSuccessfull فراخوانی نخواهد شد و در صورتی که متد endTransaction بدون فراخوانی این متد اجرا شود همه تغییرات roll back خواهند شد.