آشنایی با 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 خواهند شد.

مقادیر Null در اندروید

اگه در Sqlite فیلدی دارید که مقدار null قبول می کنه برای مقداردهی و یا خوندن مقدارش یه کمی کدنویسی بیشتر نیاز دارید.

برای مقداردهی این فیلدها به null باید از متد putNull از کلاس ContentValues استفاده کنید. تنها پارامتر اون نام فیلد مورد نظره که باید با null مقداردهی بشه

ContentValues values=new ContentValues();
values.putNull("price");

برای خوندن مقادیر این فیلدها باید ابتدا از متد isNull استفاده کنیم و مقدار آن فیلدو بررسی کنیم. به مثال زیر توجه کنید:

String sDescription="";
if(!cursor.isNull(cursor.getColumnIndex("Description"))){
    sDescription=cursor.getString(cursor.getColumnIndex("Description"));
}