آموزش حذف اطلاعات از دیتابیس SQLite در اندروید
با نام و یاد خدا
امیدوارم آموزش جلسه پیش رو به خوبی دنبال کرده باشید و آماده ادامه آموزش دیتابیس SQLite باشید. همانطور که گفتیم در این جلسه به آموزش حذف اطلاعات از دیتابیس SQLite در اندورید می پردازیم.
توجه: توصیه می شود آموزش دو جلسه قبل را مطالعه کنید تا برای آموزش این جلسه آماده باشید.
در جلسه دوازدهم ما نحوه ایجاد دیتابیس و جدول را با کمک کلاس SQLiteOpenHelper آموزش دادیم و در جلسه قبل نحوه اضافه کردن اطلاعات به دیتابیس توسط کاربر را دیدیم. حالا می خواهیم کدی بنویسیم که اجازه حذف اطلاعات را به ما بدهد.
ایجاد layout
ابتدا layout مورد نظر خود را طراحی می کنیم سپس تابع delete را می نویسیم.
- برای دسترسی به layout روی res->layout کلیک می کنیم و activity_main.xml را انتخاب می کنیم در قسمت Design تغییرات می دهیم.
- یک plain text برای وارد کردن id انتخاب می کنیم و روی صفحه گوشی رها می کنیم. از کادر سمت راست قسمت Attributes ،مشخصات این آبجکت را مشخص می کنیم.
نکته: به صورت کلی برای استفاده از تابع حذف نیاز به یک id داریم که در اینجا به صورت مستقیم از کاربر دریافت می کنیم ولی بهتر آن بود که layout را طوری طراحی کنیم که جدول به کاربر نمایش داده شود و کاربر با انتخاب ردیف مورد نظر و زدن دکمه حذف ، عملیات حذف انجام شود.
ID: etID
آی دی را وارد کنید:hint
- یک button را انتخاب می کنیم و روی صفحه قرار می دهیم . زمانی که کاربر id خود را وارد کرد و روی این دکمه کلیک کرد اطلاعات مربوط به آن id حذف خواهد شد:
ID: btnDelete
onClick: onBtnDeleteClick ( مدیریت رویدادها را در جلسه 11 آموزش دادیم)
text: حذف
با کشیدن این اشیا و تعیین خصوصیات آنها، کل کدهایی که در تب 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});
- مقدار برگشتی تابع delete را داخل یک متغیر به نام result می ریزیم تا بررسی کنیم که آیا تابع deleteData توانسته اطلاعات را حذف کند یا خیر؟ اگر حذف شده true برگرداند و اگر خیر false.
if(result==0)
return false;
else
return true;
}
از کجا فهمیدیم که مقدار برگشتی تابع delete از نوع long می باشد؟همچنین درصورتی که صفر برگرداند false است؟
در جلسه قبل روش پیدا کردن نوع خروجی برای تابع insert را بررسی کردیم. برای تابع delete هم همین کاری می کنیم؛یا اینکه دکمه ctrl صفحه کلید را نگه دارید و روی تابع delete کلیک کنید.همانطور که در تصویر زیر می بینید در قسمت کامنت این تابع نوشته شده که تعداد ردیف هایی که حذف شده را بر می گرداند بنابراین اگر صفر برگرداند یعنی عملیات delete انجام نشده است پس false می باشد.
کدنویسی در کلاس 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 در اندورید با ما همراه بودید .همانطور که دیدید نحوه حذف اطلاعات تقریبا شبیه نحوه وارد کردن اطلاعات بود. امیدواریم از این آموزش استفاده برده باشید. در جلسه بعد به نحوه به روز رسانی اطلاعات در دیتابیس می پردازیم. با ما همراه باشید.
لطفا سوالات و پیشنهادات خود را در قسمت دیدگاه ها با در میان بگذارید.
عالیه سری آموزش های اندرویدت
با سلام خدمت شما من برای اموزش این قسمت تمام کدها رو درست زدم ولی نمیدونم چرا حذف نمی کنه دو سه روزه که درگیرشم .حتی براش try catch هم گذاشتم بازهم فایده ای نداشت یعنی یک ارور که نه دوتا ارور میده یکی از توی اکتیویتی اصلی ویکی ازداخل دیتابیس میشه لطف کنید راهنماییم کنید. هرکاری کردم جواب نگرفتم.
سلام و عرض ادب. تمام کدها تست شده و تماما جواب داده است. لطفا از ابتدا با دقت مرور کنید.
با تشکر از همراهی شما
ببخشید چک کردم بازم همون مشکل هست
ببخشید شماره همراهی که گذاشتین بهش زنگ میزنم.میگه درشبکه موجود نمیباشد میشه شماره جدیدتونو بذارید تا باهاتون تماس بگیرم.وازطریق نرم افزارanydesk مشکل منو حل کنید.خیلی ممنون.
سلام.اموزشها بسیاار عالیه.فقط یه مشکلی پیش اومد برام .من وقتی declreation رو میزنم این اررور میاد که itst only usage in project files
عالی