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

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

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

نقشه ذهنی

برای راحتی کار و فهم بهتر آموزش امروز ابتدا یک نقشه ذهنی برای شما طراحی می کنم:

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

 

 

همانطور که در تصویر بالا مشخص است ما یک اکتیویتی1 (MainActivity) داریم که در آن یک شی از کلاس myDatabaseHelper ایجاد کردیم تا به توابع آن دسترسی داشته باشد در اکتیویتی1 و layout1 تنظیم کردیم که عمل insert و delete صورت گیرد(طبق آموزش جلسات قبل)

در این جلسه می خواهیم update را برای دیتابیس بنویسیم. برای راحت شدن فهم آن، یک اکتیویتی و layout دیگری ایجاد می کنیم و در آن با گرفتن آی دی و یک نام جدید آپدیت صورت می گیرد .

ایجاد دکمه “صفحه بعد” در MainActivity

  • طبق نقشه بالا در MainActivity یک دکمه با نام “صفحه بعد” باید ایجاد کنیم. پس فایل activity_main.xml (در شاخه res->layout) را باز کنید و در ادامه طراحی هایی که در جلسات گذشته انجام دادیم ، یک Button به layout اضافه کنید.

IDbtnNextPage

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

text: صفحه بعد

آموزش آپدیت اطلاعات دیتابیس SQLite در اندروید- لایوت MainActivity

  • خصوصیت onClick دکمه را onBtnNextPageClick  قرار دادیم (طبق آموزش مدیریت Eventها) بنابراین بعد از تابع onCreate یک تابع با نام onBtnNextPageClick ایجاد می کنیم و یک ورودی از نوع Veiw می گیرد. داخل تابع onClick یک Intent تعریف می کنیم تا با فشردن این دکمه از این اکتیویتی MainActivity به اکتیویتی NewPageActivity برود.

public void onBtnNextPageClick(View v){
Intent i =new Intent(MainActivity.this,NewPageActivity.class);
   startActivity(i);

}

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

حالا سراغ کلاس myDatabaseHelper  می رویم و در ادامه توابع insert و delete که جلسات قبل ایجاد کردیم، تابع update با نام updateData اضافه می کنیم. تابع به صورت زیر است:

//تابع آپدیت
public boolean updateData(String id,String n){

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

//برای ایجاد جفت مقدار و شناسه ستون
ContentValues cv=new ContentValues();
cv.put(“name”,n);

//آپدیت اطلاعات دیتابیس
long result=db.update(TBL_NAME,cv,”Id=?”,new String [] {id});

//بررسی آپدیت اطلاعات
if(result<1)
  return false;
else
  return true;
}

توضیح کد:

  • یک تابع با مقدار برگشتی Boolean تعریف می کنیم که دو متغیر از ورودی دریافت می کند با نام های id و n:

public boolean updateData(String id,String n){
}

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

SQLiteDatabase db=this.getWritableDatabase();

  • یک شی از نوع contentValues تعریف می کنیم با نام دلخواه cv :

ContentValues cv=new ContentValues();

  • با کمک شی cv مقداری که کاربر برای نام وارد می کند را به ستون مربوط به خودشون ربط می دهیم برای این کار از متد put استفاده می کنیم. به شکل زیر:

cv.put(“name”,n);

  • تابع update دیتابیس را می نویسیم که 4 ورودی از ما می خواهد:

long result=db.update(TBL_NAME,cv,”Id=?”,new String [] {id});

اول : نام جدولی که می خواهید عملیات update روی آن انجام شود: TBL_NAME

دوم : شی cv که شامل مقدار جدید است

سوم : کدام ستون . در واقع ما برای پیدا کردن سطری که قرار است ویرایش شود از شناسه منحصر به فرد “آی دی” استفاده می کنیم و چون مقدارش هنوز مشخص نشده با =؟ نمایش می دهیم.

 چهارم : مقدار id را از ورودی تابع updateData دریافت می کند ولی چون تابع update آرایه می پذیرد id را از string به آرایه  تبدیل می کنیم.

  • مقدار برگشتی تابع را به result می دهیم اگر مقدار result کمتر از یک بود یعنی سطری آپدیت نشده و false برگردان در غیر این صورت true برگرداند.

if(result<1)
  return false;
else
  return true;

 

ایجاد اکتیویتی 2 با نام NewPageActivity 

  • روی زیر شاخه java راست کلیک کنید و یک اکتیویتی جدید با نام NewPageActivity ایجاد کنید.

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

ایجاد layout

ابتدا layout مورد نظر خود را طراحی می کنیم سپس سراغ اکتیویتی آن می رویم . طبق شکل اول آن را طراحی می کنیم:

  • یک plain text برای وارد کردن نام انتخاب می کنیم . مشخصات زیر را برای آن تغییر می دهیم(مشابه تصویر زیر):

IDetidForUpdate

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

آموزش آپدیت اطلاعات دیتابیس SQLite در اندروید - لایوت NewPageActivity

  • یک plain text دیگر برای وارد کردن نام جدید قرار می دهیم با مشخصات زیر:(تصویری مشابه بالا)

IDetNameForUpdate

hint:نام جدید را وارد کنید

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

ID: btnUpdate

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

text: ویرایش

  • یک button دیگر هم قرار می دهیم تا در صورت تمایل به بازگشت به اکتیویتی قبل ،آن را کلیک کنیم.(مشابه تصویر زیر)

ID: btnBack

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

text: بازگشت

آموزش آپدیت اطلاعات دیتابیس SQLite در اندروید - لایوت NewPageActivity

با قرار دادن این آبجکت ها در 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=”.NewPageActivity”>

    <EditText
        android:id=”@+id/etidForUpdate”
        android:layout_width=”241dp”
        android:layout_height=”wrap_content”
        android:layout_alignParentTop=”true”
        android:layout_centerHorizontal=”true”
        android:layout_marginTop=”53dp”
        android:ems=”10″
        android:hint=”آی دی را وارد کنید”
        android:inputType=”textPersonName”
        tools:layout_editor_absoluteX=”280dp”
        tools:layout_editor_absoluteY=”184dp” />

    <EditText
        android:id=”@+id/etNameForUpdate”
        android:layout_width=”231dp”
        android:layout_height=”wrap_content”
        android:layout_alignParentTop=”true”
        android:layout_centerHorizontal=”true”
        android:layout_marginTop=”148dp”
        android:ems=”10″
        android:hint=”نام جدید را وارد کنید”
        android:inputType=”textPersonName”
        tools:layout_editor_absoluteX=”292dp”
        tools:layout_editor_absoluteY=”305dp” />

    <Button
        android:id=”@+id/btnUpdate”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_alignParentBottom=”true”
        android:layout_centerHorizontal=”true”
        android:layout_marginBottom=”169dp”
        android:onClick=”onBtnUpdateClick”
        android:text=”ویرایش” />

    <Button
        android:id=”@+id/btnBack”
        android:layout_width=”wrap_content”
        android:layout_height=”wrap_content”
        android:layout_alignParentBottom=”true”
        android:layout_centerHorizontal=”true”
        android:layout_marginBottom=”81dp”
        android:onClick=”onBtnBackClick”
        android:text=”بازگشت” />

</RelativeLayout>

کدهای موجود در اکتیویتی NewPageActivity 

حالا سراغ اکتیویتی مربوط به NewPageActivity  می رویم.کدهای آن به صورت کلی به شکل زیر می باشد:

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

public class NewPageActivity extends AppCompatActivity {

//تعریف متغیرها
    myDatabaseHelper mydb;
    EditText etid,etname;
    String mes=””;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_page);
// ایجاد شی از کلاس

        mydb=new myDatabaseHelper(this);
    }

//دکمه بازگشت: انتقال از این اکتیویتی به اکتیویتی قبل
    public void onBtnBackClick(View v){
        Intent i=new Intent(NewPageActivity.this,MainActivity.class);
        startActivity(i);
    }
//فراخوانی تابع آپدیت اطلاعات

    public void onBtnUpdateClick(View v){

//نسبت دادن اشیا لایوت به متغیر اکتیویتی
     etid=findViewById(R.id.etidForUpdate);
     etname=findViewById(R.id.etNameForUpdate);

//تبدیل به string
String strid=etid.getText().toString();
String strname=etname.getText().toString();

//چک کردن ورودی
     if(strname.length()>0 && strid.length()>0){

//دادن متغیر ها به ورودی تابع آپدیت
         boolean f=mydb.updateData(strid,strname);
         if(f==true)
             mes=”آپدیت شد”;
         else
             mes=”آپدیت نشد”;
//نمایش پیغام

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

//کاربر‌ آی دی و نام را وارد نکرده است
     else {
         etid.setHint(“لطفاآی دی را وارد کنید”);
         etname.setHint(“لطفا نام جدید را وارد کنید”);
         return;
     }
    }
}

توضیح کد:

  •  ابتدا یک شی از کلاس myDataBaseHelper  ایجاد می کنیم تا به تابع update آن دسترسی داشته باشیم .متغیری از نوع myDatabaseHelper تعریف می کنیم در سطح کلاس:

myDatabaseHelper mydb;

  • داخل متد onCreate آن شی را ایجاد می کنیم.

mydb=new myDatabaseHelper(this);

  • بعد از تابع onCreate تابع click مربوط به دکمه بازگشت را می نویسیم که دقیقا مشابه دکمه “صفحه بعد”  هست با این تفاوت که با فشردن این دکمه از این کلاس به کلاس MainActivity می رویم.

public void onBtnBackClick(View v){
    Intent i=new Intent(NewPageActivity.this,MainActivity.class);
    startActivity(i);
}

  • دو متغیر از نوع EditText با نام  etname و edtid ایجاد می کنیم تا  دو شی plain text ای که در layout قرار دادیم را با کمک id به آن نسبت دهیم . سپس مقادیر وارد شده را به رشته تبدیل می کنیم و در متغیرهایstrname و strid ذخیره می کنیم.
  • ابتدا با یک شرط if چک می کنیم کاربر مقدار آی دی و نام را وارد کرده یا خیر؟ سپس فراخوانی تابع updateData را انجام می دهیم و دو مقدار strid,strname  را به عنوان ورودی به آن می دهیم سپس بررسی می کنیم که مقدار برگشتی true بوده یا false. و پیغام مناسب را چاپ می کنیم.

if(strname.length()>0 && strid.length()>0){
         boolean f=mydb.updateData(strid,strname);
         if(f==true)
             mes=”آپدیت شد”;
         else
             mes=”آپدیت نشد”;
         Toast.makeText(NewPageActivity.this,mes,Toast.LENGTH_LONG).show();
     }
     else {
         etid.setHint(“لطفاآی دی را وارد کنید”);
         etname.setHint(“لطفا نام جدید را وارد کنید”);
         return;
     }

اجرای برنامه

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

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

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

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

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

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

 

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