دستور select در دیتابیس SQLite اندروید

با نام و یاد خدا
امیدواریم تا اینجای کار از آموزش های مربوط به دیتابیس در اندروید راضی بوده باشید امروز به آخرین مبحث از این موضوع یعنی دستور select در دیتابیس SQLite اندروید می پردازیم. از جلسه دوازدهم مبحث کار با دیتابیس را در قالب یک پروژه کوچک شروع کردیم و دستورات insert، delete و update را به صورت کامل گفتیم. امروز دستور select برای نمایش داده ها را آموزش خواهیم داد.

توجه: توصیه می شود از آموزش جلسه ۱۲ شروع کنید تا برای این آموزش آماده باشید.مباحث به صورت پیوسته بیان شده است.

 

ایجاد دکمه “نمایش داده ها” در لایوت NewPageActivity

ابتدا فایل activity_new_page.xml (در شاخه res->layout) را باز کنید و در ادامه طراحی هایی که در جلسه گذشته انجام دادیم ، یک Button به layout اضافه کنید.(تابع کلیک این دکمه را در ادامه خواهیم داد)

IDbtnShowAll

onClick: onBtnShowAllClick ( مدیریت رویدادها را در جلسه 11 آموزش دادیم)

text: نمایش داده ها

آموزش دستور select در دیتابیس SQLite اندروید

ایجاد دستور Select برای دیتابیس

کلاس myDatabaseHelper  را باز کنید (در جلسه ۱۲ ایجاد کردیم) و در ادامه توابع insert و delete و update که در جلسات قبل ایجاد کردیم تابع select را با نام دلخواه ShowallData به شکل زیر می نویسیم:

//تابع نمایش اطلاعات
public Cursor ShowallData(){
    SQLiteDatabase db=this.getWritableDatabase();
    Cursor result=db.rawQuery(“select * from ” + TBL_NAME,null);
    return result;
}

توضیح کد:

  • تابع ShowallData   ورودی لازم ندارد فقط اطلاعات را برمی گرداند. مقدار برگشتی آن را از نوع Cursor تعریف کردیم .

Cursor: نوعی است که متغیر از هر نوع را در برمی گیرد.(چون داده های ما شمامل عدد و متن می باشد از این نوع استفاده می کنیم)

public Cursor ShowallData(){
}

  • دستور ثابت که در تمام توابع (اضافه و حذف و آپدیت) نوشتیم تا اتصال به دیتابیس قابل تغییر برقرار شود.

SQLiteDatabase db=this.getWritableDatabase();

  •  با استفاده از شی sqLiteDatabase و دستور rawQuery یک دستور SQL را در پایگاه داده اجرا می‌کنیم :

آرگومان اول: دستور select را می نویسیم  و با علامت * می گوییم تمام داده ها را نمایش بده.

آرگومان دوم: می گوید داده های مربوط به جدول TBL_NAME را نمایش ده.

آرگومان سوم: به کار ما نمی آید و null می دهیم.

Cursor result=db.rawQuery(“select * from ” + TBL_NAME,null);
return result;

  • و چون قراره اطلاعات ما به صورت یک لیست برگردد پس نتایج را داخل یک متغیر از نوع Cursor و با نام دلخواه result ذخیره می کنیم و در نهایت می گوییم مقدار result را برگردان.

 

تعریف تابع onClick دکمه “نمایش داده ها” و فراخوانیتابع Select در اکتیویتی NewPageActivity 

این کلاس را جلسه قبل ایجاد کردیم و کامل لایوت و اکتیویتی آن را توضیح دادیم . حالا می خواهیم با فشردن دکمه “نمایش داده ها” تابع Select که در myDatabaseHelper نوشتیم، فراخوانی شود.شکل کلی تابع به صورت زیر است:

public void onBtnShowAllClick(View v){

//فراخوانی تابع Select
    Cursor res=mydb.ShowallData();

//بررسی خالی بودن جدول
    if(res.getCount()==0){
        Toast.makeText(NewPageActivity.this,”جدول خالی بود”,Toast.LENGTH_LONG).show();

    }
//ایجاد متغیر 
        StringBuffer data=new StringBuffer();

//گرفتن تمام داداه های داخل جدول 
        while (res.moveToNext()){
            data.append(“ID:” + res.getString(0)+ “\n”);
            data.append(“name:” + res.getString(1) + “\n”);
            data.append(“Lastname” + res.getString(2) + “\n”);
        }

//نمایش داده ها با دستور Alert
        AlertDialog.Builder alert=new AlertDialog.Builder(this);
        alert.setCancelable(true);
        alert.setTitle(“نمایش داده ها”);
        alert.setMessage(data.toString());
        alert.show();
}

  • یک تابع با نام onBtnShowAllClick (همان نامی که در layout برای onClick نوشتیم ) در کلاس NewPageActivity می نویسیم . یعنی وقتی دکمه “نمایش داده ها” کلیک شد این تابع اجرا شود.

public void onBtnShowAllClick(View v){
}

  • یک شی با نام دلخواه  mydb  برای دسترسی  به کلاس myDatabaseHelper در جلسه قبل ایجاد کردیم. با استفاده از این شی تابع ShowallData را فراخوانی می کنیم. مقدار برگشتی آن را درون یک متغیر با نام دلخواه res و از نوع Cursor می ریزیم.

Cursor res=mydb.ShowallData();

اگر جدول خالی بود

  • با یک دستور if چک می کنیم که آیا داخل جدول اطلاعاتی هست یا خیر؟

if(res.getCount()==0){
        Toast.makeText(NewPageActivity.this,“جدول خالی بود”,Toast.LENGTH_LONG).show();

    }

نکته: با دستور getCount بررسی می کنیم که چقدر داده در res ذخیره شده است . اگر برابر 0 بود یعنی جدول خالی بود پس یک پیغام بده که جدول خالی بود.

نکته: دستور toast را قبلا کامل توضیح دادیم. آرگومان اول میگه پیغام را در کدام اکتیویتی چاپ کنم؟ آرگومان دوم میگه متن پیغام چیه؟ آرگومان سوم هم میگه چه مدت زمان نمایش دهد،طولانی یا کوتاه.

نکته: اگر ()show را ننویسید پیغام را نمایش نمی دهد.

 

اگر جدول خالی نبود

  • در غیر این صورت یعنی جدول خالی نبود باید اطلاعات را نمایش دهد.

توجه: به سادگی نمیتوانیم متغیر Cursor را به Alert بدهیم تا چاپ کند برای همین یک متغیر با نام دلخواه data از نوع StringBuffer می سازیم . در ادامه به طور کامل متوجه خواهید شد.

 

  • ابتدا یک شرط می گذاریم که تمام داده ها از ردیف اول تا آخر را برگرداند. برای این کار می گوییم تا زمانی که moveToNext (یعنی پرش به ردیف بعدی جدول) ،True هست. داده ها را بخوان و برگردان.

while (res.moveToNext()){

  • گفتیم که برای نمایش اطلاعات باید داده ها را داخل متغیر از نوع StringBuffer بریزیم. برای این کار از تابع appent استفاده می کنیم.
    تابع append یک ورودی از نوع int می خواهد که همان شماره ستون می باشد.

data.append(“ID:” + res.getString(0)+ “\n”);

 

نکته: برای اینکه کاربر متوجه شود این داده ها چی هستند قبل از نوشتن شماره ستون یک متن هم می نویسیم. تابع showallData فقط داده ها را برمی گرداند ولی مشخص نمی کند این داده آی دی است یا نام یا ….

 

  • تا زمانی که حلقه while ما true می باشد یکی یکی ردیف ها را append می کند. مثلا اینجا برای داده های ردیف اول در نظر بگیرید:

کد زیر می گوید res  داده موجود در ردیف اول و ستون اول جدول را بگیرد (ایندکس ستون اول 0 است) و قبلش مشخص کند که این داده ID می باشد و به متغیر StringBuffer بدهد.

data.append(“ID:” + res.getString(0)+ “\n”);

کد زیر می گوید res داده موجود در ردیف اول و ستون دوم را بگیرد (ایندکس ستون دوم1 است) و قبلش مشخص کند که این داده name می باشد و به متغیر StringBuffer بدهد.

data.append(“name:” + res.getString(1) + “\n”);

دوباره می گوییم  res داده موجود در ردیف اول و ستون سوم را بگیرد( ایندکس ستون سوم 2 است ) و قبلش مشخص کند که این داده Lastname می باشد و به متغیر StringBuffer بدهد.

data.append(“Lastname” + res.getString(2) + “\n”);

نکته:n\ برای این است که به خط بعد برود.

این حلقه برای ردیف های بعد تکرار می شود تا زمانی که شرط while درست باشد.

 

چاپ اطلاعات

  • حالا باید متغیر stringBuffer را به تابع Alert بدهیم تا چاپ کنیم. برای این کار ابتدا متغیری از نوع  Aletr با نام دلخواه alert تعریف می کنیم:

AlertDialog.Builder alert=new AlertDialog.Builder(this);

 

Alert چند پارامتر دارد که باید تنظیم کنیم:

  • با setCancelable پیغام توسط کاربر قابل cansel شدن می شود.

alert.setCancelable(true);

  • با دستور setTitle عنوان پیغام را تعیین می کنیم.

alert.setTitle(“نمایش داده ها”);

 

  • با دستور setMessage مشخص می کنیم چه چیزی نمایش دهد. متغیرdata که از نوع  stringBuffer بود و اطلاعات جدول به صورت مرتب شده به آن append شد را به عنوان ورودی به alert می دهیم البته باید به string تبدیل شود.

alert.setMessage(data.toString());

  • در نهایت این alert با دستور show نمایش داده می شود.

alert.show();

در ادامه کدهایی که در جلسه قبل در NewPageActivity نوشته بودیم تابع onBtnShowAllClick را اضافه کردیم .

آموزش دستور select در دیتابیس SQLite اندروید - فراخوانی تابع select در دیتابیس

اجرای برنامه

برنامه را اجرا کنید (طبق آموزش جلسه پنجم) و دکمه “نمایش داد ها” را بزنید. نتیجه در اجرای برنامه ما به صورت زیر است:

دستور select در دیتابیس SQLite اندروید

 

 

آموزش دستور select در دیتابیس SQLite اندروید به پایان رسید  حالا به راحتی می توانید اطلاعات را اضافه ، حذف و آپدیت کنید و نتابج را ببیند. امیدواریم آموزش دیتابیس تا این حد پاسخگوی نیازهای شما باشد. اگر مبحثی در رابطه با دیتابیس هست که فکر می کنید نیاز به آموزش دارد در قسمت دیدگاه ها با ما در میان بگذارید.

لطفا سوالات و پیشنهادات خود را در قسمت دیدگاه ها، زیر همین آموزش با در میان بگذارید.

مدرس: مهندس مهدی نیکخواه

 

به این مقاله چند تا ستاره میدی؟
[تعداد رای: 7 امتیاز: 3.9]