آموزش حذف اطلاعات از دیتابیس SQLite در اندروید

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

توجه: توصیه می شود آموزش دو جلسه قبل را مطالعه کنید تا برای آموزش این جلسه آماده باشید.

در جلسه دوازدهم ما نحوه ایجاد دیتابیس و جدول را با کمک کلاس SQLiteOpenHelper آموزش دادیم و در جلسه قبل نحوه اضافه کردن اطلاعات به دیتابیس توسط کاربر را دیدیم. حالا می خواهیم کدی بنویسیم که اجازه حذف اطلاعات را به ما بدهد.

ایجاد layout 

ابتدا layout مورد نظر خود را طراحی می کنیم سپس تابع delete را می نویسیم.

  • برای دسترسی به layout روی res->layout کلیک می کنیم و  activity_main.xml‌ را انتخاب می کنیم در قسمت Design تغییرات می دهیم.
  • یک plain text برای وارد کردن id انتخاب می کنیم و روی صفحه گوشی رها می کنیم. از کادر سمت راست قسمت Attributes ،مشخصات این آبجکت را مشخص می کنیم.

نکته: به صورت کلی برای استفاده از تابع حذف نیاز به یک id داریم که در اینجا به صورت مستقیم از کاربر دریافت می کنیم ولی بهتر آن بود که layout را طوری طراحی کنیم که جدول به کاربر نمایش داده شود و  کاربر با انتخاب ردیف مورد نظر و زدن دکمه حذف ، عملیات حذف انجام شود.

ID: etID

 آی دی را وارد کنید:hint

آموزش حذف اطلاعات از دیتابیس SQLite -طراحی layout

  • یک button را انتخاب می کنیم و روی صفحه قرار می دهیم . زمانی که کاربر id خود را وارد کرد و روی این دکمه کلیک کرد اطلاعات مربوط به آن id حذف خواهد شد:

ID: btnDelete

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

text: حذف

آموزش حذف اطلاعات از دیتابیس SQLite -طراحی ظاهر layout

با کشیدن این اشیا و تعیین خصوصیات آنها، کل کدهایی که در تب text ایجاد شده اند، به صورت زیر می باشد:

<?xml version=”1.0″ encoding=”utf-8″?>
<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    xmlns:app=”http://schemas.android.com/apk/res-auto”
    xmlns:tools=”http://schemas.android.com/tools”
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    tools:context=”.MainActivity”>

    <EditText
        android:id=”@+id/fname”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_alignParentTop=”true”
        android:layout_centerHorizontal=”true”
        android:layout_marginTop=”84dp”
        android:ems=”10″
        android:hint=”نام را وارد کنید”
        android:inputType=”textPersonName” />

    <EditText
        android:id=”@+id/Lastname”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_alignParentTop=”true”
        android:layout_centerHorizontal=”true”
        android:layout_marginTop=”139dp”
        android:ems=”10″
        android:hint=”نام خانوادگی را وارد کنید”
        android:inputType=”textPersonName” />

    <Button
        android:id=”@+id/btnsave”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_alignParentTop=”true”
        android:layout_centerHorizontal=”true”
        android:layout_marginTop=”217dp”
        android:onClick=”onBtnSaveClick”
        android:text=”ذخیره” />

<EditText
android:id=”@+id/etID”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentBottom=”true”
android:layout_centerHorizontal=”true”
android:layout_marginBottom=”215dp”
android:ems=”10″
android:hint=”آی دی را وارد کنید”
android:inputType=”textPersonName” />

<Button
android:id=”@+id/btnDelete”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentBottom=”true”
android:layout_centerHorizontal=”true”
android:layout_marginBottom=”130dp”
android:onClick=”onBtnDeleteClick”
android:text=”حذف” />

</RelativeLayout>

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

ابتدا سراغ کلاس myDatabaseHelper  می رویم که در جلسه پیش ایجاد کردیم ادامه توابعی که نوشتیم ، یک تابع با نام دلخواه deleteData ایجاد می کنیم.تابع کلی به صورت زیر می باشد :

//تابع حذف کردن
public boolean deleteData(String id){

//اتصال به دیتابیس قابل نوشتن
   SQLiteDatabase db=this.getWritableDatabase();

//حذف اطلاعات از دیتابیس
   long result=db.delete(TBL_NAME,”Id=?”,new String[] {id});

//بررسی حذف اطلاعات
   if(result==0)
      return false;
  else
      return true;
}

توضیح کدهای تابع deleteData:

  • تابع deleteData یک مقدار برگشتی از نوع boolean دارد که همان true یا false می باشد و یک id دریافت می کند تا سطر مربوط به آن id را از دیتابیس حذف کند. همانطور که در بالا هم اشاره کردیم ؛ تابع حذف نیاز به یک id دارد که از ورودی دریافت می کند.

public boolean deleteData(String id){

}

  • خط بعدی برای اجرای عملیات delete اتصال با دیتابیس را برقرار می کند و آن را قابل نوشتن می کند.

   SQLiteDatabase db=this.getWritableDatabase();

  • تابع delete را فراخوانی می کنیم که یک سری ورودی از ما می خواهد:
    اول:نام جدولی که می خواهیم عملیات حذف روی آن اجرا شود.
    دوم:کدام ستون:id  (چون مقدارشو نمی دونیم با علامت ? برابر میذاریم)
    سوم:مقدارش را از ورودی تابع deleteData دریافت می کند ولی چون تابع delete آرایه می پذیرد id را از string به آرایه  تبدیل می کنیم.

db.delete(TBL_NAME,“Id=?”,new String[] {id});

آموزش حذف اطلاعات از دیتابیس SQLite - تابع حذف کردن

  • مقدار برگشتی تابع delete را داخل یک متغیر به نام result می ریزیم تا بررسی کنیم که آیا تابع deleteData توانسته اطلاعات را حذف کند یا خیر؟ اگر حذف شده true برگرداند و اگر خیر false.

if(result==0)
   return false;
else
   return true;
}

از کجا فهمیدیم که مقدار برگشتی تابع delete از نوع long می باشد؟همچنین درصورتی که صفر برگرداند false است؟

در جلسه قبل روش پیدا کردن نوع خروجی برای تابع insert را بررسی کردیم. برای تابع delete هم همین کاری می کنیم؛یا اینکه دکمه ctrl صفحه کلید را نگه دارید و روی تابع delete کلیک کنید.همانطور که در تصویر زیر می بینید در قسمت کامنت این تابع نوشته شده که تعداد ردیف هایی که حذف شده را بر می گرداند بنابراین اگر صفر برگرداند یعنی عملیات delete انجام نشده است پس false می باشد.

 

آموزش حذف اطلاعات از دیتابیس SQLite - توصیف تابع delete

کدنویسی در کلاس MainActivty

حالا وقت آن رسیده که تابع deleteData را در کلاس MainActivity فراخوانی کنیم.در جلسه قبل برای فراخوانی تابع insert یک شی به نام mydb از کلاس myDatabaseHelper  ساختیم. پس از همان شی mydb برای فراخوانی تابع deleteData استفاده می کنیم.

کل کدهای موجود در کلاس MainActivity :

 

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

myDatabaseHelper mydb;
EditText fn,Ln,edtid;
String mes=””;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ایجاد شی از کلاس
mydb=new myDatabaseHelper(this);
}

//فراخوانی تابع حذف کردن اطلاعات
public void onBtnSaveClick(View v){
fn=findViewById(R.id.fname);
String f=fn.getText().toString();
 if(f.length()<1){
  fn.setHint(“نام وارد نشده است”);
  return;
}

Ln=findViewById(R.id.lname);
String l=Ln.getText().toString();
if(l.length()<1){
Ln.setHint(“نام وارد نشده است”);
return;
}

boolean a= mydb.insertData(f,l);
  if(a==true)
    mes=”اطلاعات ذخیره شد”;
  else
     mes=”اطلاعات ذخیره نشد”;

Toast.makeText(MainActivity.this,mes,Toast.LENGTH_LONG).show();
}

// فراخوانی تابع حذف کردن اطلاعات
public void onBtnDeleteClick(View v){

//نسبت دادن شی موجود در لایوت به متغیر در اکتیوتی
edtid=findViewById(R.id.etID);

// گرفتن مقدار وارد شده توسط کاربر و تبدیل به رشته
String e=edtid.getText().toString();

//اگر آی دی توسط کاربر وارد نشده
 if(e.length()<1){
   edtid.setHint(“آی دی وارد نشده است”);
   return;
}

//دادن آی دی به ورودی  تابع حذف
boolean b=mydb.deleteData(e);
  if(b==true)
     mes=”حذف شد”;
  else
     mes=”حذف نشد”;
//نمایش پیغام
Toast.makeText(MainActivity.this,mes,Toast.LENGTH_LONG).show();

}
}

توضیح کدهای کلاس MainActivity

کدهای بالا به صورت کامل در جلسه توضیح دادیم فقط قسمت حذف کردن اطلاعات را توضیح می دهیم.

  • خصوصیت onClick دکمه حذف را onBtnDeleteClick قرار دادیم (طبق آموزش مدیریت Eventها) بنابراین بعد از تابع onCreate یک تابع با نام onBtnDeleteClick ایجاد می کنیم و یک ورودی از نوع Veiw می گیرد.

public void onBtnDeleteClick(View v){

}

  • یک شی از نوع EditText با نام edtid ایجاد می کنیم تا شی plain text ای که در layout قرار دادیم را با کمک id به آن نسبت دهیم . سپس مقدار وارد شده را به رشته تبدیل می کنیم و در یک متغیر با نام دلخواه e ذخیره می کنیم.

edtid=findViewById(R.id.etID);
String e=edtid.getText().toString();

  • برای اینکه مطمئن باشیم کاربر مقدار id را وارد کرده است از شرط زیر استفاده می کنیم:

 if(e.length()<1){
   edtid.setHint(“آی دی وارد نشده است”);
   return;
}

  • وقت آن رسیده تابع deleteData را فراخوانی کنیم و مقدار e که همان id است به عنوان ورودی به آن بدهیم. سپس بررسی می کنیم که مقدار برگشتی true بوده یا false. و پیغام مناسب را چاپ می کنیم.(توضیح کامل تر این قسمت در پست قبل می باشد)

boolean b=mydb.deleteData(e);
  if(b==true)
     mes=”حذف شد”;
  else
     mes=”حذف نشد”;
Toast.makeText(MainActivity.this,mes,Toast.LENGTH_LONG).show();

اجرای برنامه

برنامه را با کمک Gnymotion اجرا می کنیم(شما می توانید به هر روشی که می خواهید اجرا کنید) و یک آی دی وارد می کنیم تا حذف کند. همانطور که در تصویر زیر می بینید آی دی 7  حذف شد

آموزش حذف اطلاعات از دیتابیس SQLite - اجرای برنامه

 

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

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

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

 

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