عملیات CRUD با استفاده از بانک SQLite در اندروید

یکشنبه 27 دی 1394

در این مقاله قصد داریم عملیات crud را با استفاده از بانک اطلاعاتی sqlite ، یک بانک اطلاعاتی سبک و open source که از ویژگی های رابطه ای پایگاه داده مثل syntax های MS Sql پشتیبانی می کند را نمایش دهیم.

عملیات CRUD با استفاده از بانک SQLite در اندروید

SQLiteDatabase، کلاس پایه برای برای کار با پایگاه داده sqlite است، که برخی از دستورات باز و بسته کردن دیتابیس و کوئری های مختلف روی آن پذیر خواهد بود.

قبل از خواندن این مقاله می توانید مقاله ی مثال ساده ازپایگاه داده SQLite در اندروید را مطالعه نمایید.

ابتدا یک پروژه ی جدید ایجاد نمایید.

نام application و محل ذخیره سازی آن را مشخص نمایید.

پایین ترین sdk را درنظر بگیرید و گزینه ی گوشی و تبلت را انتخاب نمایید.

یک blankactivity به صورت زیر انتخاب نمایید.

یک نام برای activity خود انتخاب نمایید.

زمانی که مراحل را انجام دادید به صورت زیر:

به صورت پیش فرض کلمه ی helloworld نمایش داده خواهد شد.

در لایه ی activity یک textview به صورت زیر را قرار دهید:

    <TextView  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:id="@+id/textView"  
       android:layout_centerHorizontal="true"  
       android:textSize="30dp"  
       android:text="CRUD for Student using SQLLite"  
    />   

یک کلاس جاوا به نام DBHelper.java اضافه می نماییم

کلاس SQLLiteOpenHelper از کلاس DBhelper ارث بری می نماید، داخل این کلاس دو متد تعریف شده است برای خواندن و نوشتن اطلاعات و متدی که شی های SQLLiteDatabase این را دسترسی دارد.

حالا کلاس به صورت زیر خواهد بود:

 import android.content.ContentValues;  
 import android.content.Context;  
 import android.database.Cursor;  
 import android.database.DatabaseUtils;  
 import android.database.sqlite.SQLiteDatabase;  
 import android.database.sqlite.SQLiteOpenHelper;  
   
 import java.util.ArrayList;  
 import java.util.HashMap;  
   
 /** 
  * Created by ppandey on 12/15/2015. 
  */  
 public class DBHelper extends SQLiteOpenHelper {  
 public static final String DATABASE_NAME = "contactdb.sqlite";  
 public static final String CONTACTS_TABLE_NAME = "mycontacts";  
 public static final String CONTACTS_COLUMN_ID  = "id";  
 public static final String CONTACTS_COLUMN_STUNAME = "name";  
 public static final String CONTACTS_COLUMN_STUPHONE = "phone";  
 public static final String CONTACTS_COLUMN_STUSTREET = "street";  
 public static final String CONTACTS_COLUMN_STUEMAIL = "email";  
 public static final String CONTACTS_COLUMN_STUCITY = "place";  
   
 private HashMap hp;  
   
 public DBHelper(Context context)  
     {  
 super(context, DATABASE_NAME , null, 3);  
     }  
   
 @Override  
 public void onCreate(SQLiteDatabase db) {  
         db.execSQL(  
 "create table mycontacts " +  
 "(id integer primary key autoincrement, name text,phone text,email text, street text,place text)"  
 );  
     }  
   
 @Override  
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
         db.execSQL("DROP TABLE IF EXISTS mycontacts");  
         onCreate(db);  
     }  
 public boolean addStudentContact(String contactname,String contactphone,String contactstreet,String contactemail, String contactplace){  
 /*,*/  
 SQLiteDatabase db=this.getWritableDatabase();  
         ContentValues contantValues = new ContentValues();  
         contantValues.put("name",contactname);  
         contantValues.put("phone", contactphone);  
         contantValues.put("street",contactstreet);  
         contantValues.put("email",contactemail);  
         contantValues.put("place",contactplace);  
         db.insert("mycontacts", null, contantValues);  
         db.close();  
 return true;  
     }  
 public boolean updateStudentContact(Integer contactid,String contactname,String contactphone,String contactstreet,String contactemail, String contactplace)  
     {  
 /*,String contactname,*/  
 SQLiteDatabase db=this.getWritableDatabase();  
         ContentValues contantValues = new ContentValues();  
         contantValues.put("name",contactname);  
         contantValues.put("phone", contactphone);  
         contantValues.put("street",contactstreet);  
         contantValues.put("email",contactemail);  
         contantValues.put("place",contactplace);  
         db.update("mycontacts", contantValues, "id = ?", new String[]{Integer.toString(contactid)});  
         db.close();  
 return true;  
     }  
 public Integer deleteContact(Integer id){  
         SQLiteDatabase db=this.getWritableDatabase();  
 return db.delete("mycontacts","id = ?",new String[]{Integer.toString(id)});  
     }  
 public Cursor getData(int contactid){  
         SQLiteDatabase db=this.getWritableDatabase();  
         Cursor res=db.rawQuery("Select * from mycontacts where id = " + contactid + "", null);  
 return res;  
     }  
 public int numberOfRows(){  
         SQLiteDatabase db=this.getWritableDatabase();  
 int numRows=(int) DatabaseUtils.queryNumEntries(db,CONTACTS_TABLE_NAME);  
 return numRows;  
     }  
 public ArrayList<String> getAllStudentContacts(){  
         ArrayList<String> arraylist= new ArrayList<String>();  
         SQLiteDatabase db=this.getReadableDatabase();  
         Cursor cursor=db.rawQuery("Select * from mycontacts",null);  
   
 if (cursor.moveToFirst()) {  
 do {  
                 arraylist.add(cursor.getString(cursor.getColumnIndex(CONTACTS_COLUMN_STUNAME)));  
  } while (cursor.moveToNext());  
         }  
 return arraylist;  
     }  
 }   

یک کلاس دیگر برای نمایش اطلاعات استفاده می نماییم که جزیئات کاربران به آن اضافه خواهد شد به صورت زیر خواهد بود:

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  
     xmlns:tools="http://schemas.android.com/tools"  
     android:layout_width="match_parent"  
     android:layout_height="wrap_content"  
     android:id="@+id/scrollView1"  
     >  
       
         <RelativeLayout  
     android:layout_width="match_parent"  
     android:layout_height="350dp"  
     android:paddingLeft="@dimen/activity_horizontal_margin"  
     android:paddingRight="@dimen/activity_horizontal_margin"  
     android:paddingTop="@dimen/activity_vertical_margin"  
     android:paddingBottom="@dimen/activity_vertical_margin"  
     tools:context="com.test.ppandey.contactapp.DisplayContact">  
       
             <EditText  
     android:id="@+id/editTextName"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignParentLeft="true"  
     android:layout_marginTop="5dp"  
     android:layout_marginLeft="82dp"  
     android:ems="10"  
     android:inputType="text" >  
             </EditText>  
       
             <EditText  
     android:id="@+id/editTextEmail"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignLeft="@+id/editTextStreet"  
     android:layout_below="@+id/editTextStreet"  
     android:layout_marginTop="22dp"  
     android:ems="10"  
     android:inputType="textEmailAddress" />  
       
             <TextView  
     android:id="@+id/textView1"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBottom="@+id/editTextName"  
     android:layout_alignParentLeft="true"  
     android:text="@string/name"  
     android:textAppearance="?android:attr/textAppearanceMedium" />  
       
             <Button  
     android:id="@+id/button1"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignLeft="@+id/editTextCity"  
     android:layout_alignParentBottom="true"  
     android:layout_marginBottom="28dp"  
     android:onClick="saveData"  
     android:text="@string/save" />  
       
             <TextView  
     android:id="@+id/textView2"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBottom="@+id/editTextEmail"  
     android:layout_alignLeft="@+id/textView1"  
     android:text="@string/email"  
     android:textAppearance="?android:attr/textAppearanceMedium" />  
       
             <TextView  
     android:id="@+id/textView5"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBottom="@+id/editTextPhone"  
     android:layout_alignLeft="@+id/textView1"  
     android:text="@string/phone"  
     android:textAppearance="?android:attr/textAppearanceMedium" />  
       
             <TextView  
     android:id="@+id/textView4"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_above="@+id/editTextEmail"  
     android:layout_alignLeft="@+id/textView5"  
     android:text="@string/street"  
     android:textAppearance="?android:attr/textAppearanceMedium" />  
       
             <EditText  
     android:id="@+id/editTextCity"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignRight="@+id/editTextName"  
     android:layout_below="@+id/editTextEmail"  
     android:layout_marginTop="30dp"  
     android:ems="10"  
     android:inputType="text" />  
       
             <TextView  
     android:id="@+id/textView3"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignBaseline="@+id/editTextCity"  
     android:layout_alignBottom="@+id/editTextCity"  
     android:layout_alignParentLeft="true"  
     android:layout_toLeftOf="@+id/editTextEmail"  
     android:text="@string/country"  
     android:textAppearance="?android:attr/textAppearanceMedium" />  
       
             <EditText  
     android:id="@+id/editTextStreet"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignLeft="@+id/editTextName"  
     android:layout_below="@+id/editTextPhone"  
     android:ems="10"  
     android:inputType="text" >  
       
                 <requestFocus />  
             </EditText>  
       
             <EditText  
     android:id="@+id/editTextPhone"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_alignLeft="@+id/editTextStreet"  
     android:layout_below="@+id/editTextName"  
     android:ems="10"  
     android:inputType="phone|text" />  
       
         </RelativeLayout>  
     </ScrollView>  

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

import android.app.AlertDialog;  
 import android.content.DialogInterface;  
 import android.content.Intent;  
 import android.database.Cursor;  
 import android.support.v7.app.ActionBarActivity;  
 import android.os.Bundle;  
 import android.view.Menu;  
 import android.view.MenuItem;  
 import android.view.View;  
 import android.widget.Button;  
 import android.widget.TextView;  
 import android.widget.Toast;  
   
 public class DisplayContact extends ActionBarActivity {  
 int from_Where_I_Am_Coming = 0;  
 private DBHelper mydb;  
     TextView name;  
     TextView phone;  
     TextView email;  
     TextView street;  
     TextView place;  
 int id_To_Update = 0;  
   
 @Override  
 protected void onCreate(Bundle savedInstanceState) {  
 super.onCreate(savedInstanceState);  
         setContentView(R.layout.activity_display_contact);  
   
 name = (TextView) findViewById(R.id.editTextName);  
 phone = (TextView) findViewById(R.id.editTextPhone);  
 email = (TextView) findViewById(R.id.editTextStreet);  
 street = (TextView) findViewById(R.id.editTextEmail);  
 place = (TextView) findViewById(R.id.editTextCity);  
   
 mydb = new DBHelper(this);  
   
         Bundle extras = getIntent().getExtras();  
         {  
 int Value = extras.getInt("id");  
   
 if (Value > 0) {  
 //means this is the view part not the add contact part.  
 Cursor rs = mydb.getData(Value);  
 id_To_Update = Value;  
                 rs.moveToFirst();  
   
                 String stuname = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUNAME));  
                 String stuphone = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUPHONE));  
                 String stuemail = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUEMAIL));  
                 String stustreet = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUSTREET));  
                 String stuplace = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STUCITY));  
   
 if (!rs.isClosed()) {  
                     rs.close();  
                 }  
                 Button b = (Button) findViewById(R.id.button1);  
                 b.setVisibility(View.INVISIBLE);  
   
 name.setText((CharSequence) stuname);  
 name.setFocusable(false);  
 name.setClickable(false);  
   
 phone.setText((CharSequence) stuphone);  
 phone.setFocusable(false);  
 phone.setClickable(false);  
   
 email.setText((CharSequence) stuemail);  
 email.setFocusable(false);  
 email.setClickable(false);  
   
 street.setText((CharSequence) stustreet);  
 street.setFocusable(false);  
 street.setClickable(false);  
   
 place.setText((CharSequence) stuplace);  
 place.setFocusable(false);  
 place.setClickable(false);  
             }  
         }  
     }  
   
 @Override  
 public boolean onCreateOptionsMenu(Menu menu) {  
 // Inflate the menu; this adds items to the action bar if it is present.  
 Bundle extras = getIntent().getExtras();  
   
 if (extras != null) {  
 int Value = extras.getInt("id");  
 if (Value > 0) {  
                 getMenuInflater().inflate(R.menu.menu_display_contact, menu);  
             } else {  
                 getMenuInflater().inflate(R.menu.menu_main, menu);  
             }  
         }  
 return true;  
     }  
   
 @Override  
 public boolean onOptionsItemSelected(MenuItem item) {  
 // Handle action bar item clicks here. The action bar will  
         // automatically handle clicks on the Home/Up button, so long  
         // as you specify a parent activity in AndroidManifest.xml.  
 super.onOptionsItemSelected(item);  
 switch (item.getItemId()) {  
 case R.id.Edit_Contact:  
                 Button b = (Button) findViewById(R.id.button1);  
                 b.setVisibility(View.VISIBLE);  
 name.setEnabled(true);  
 name.setFocusableInTouchMode(true);  
 name.setClickable(true);  
   
 phone.setEnabled(true);  
 phone.setFocusableInTouchMode(true);  
 phone.setClickable(true);  
   
 email.setEnabled(true);  
 email.setFocusableInTouchMode(true);  
 email.setClickable(true);  
   
 street.setEnabled(true);  
 street.setFocusableInTouchMode(true);  
 street.setClickable(true);  
   
 place.setEnabled(true);  
 place.setFocusableInTouchMode(true);  
 place.setClickable(true);  
   
 return true;  
 case R.id.Delete_Contact:  
   
                 AlertDialog.Builder builder = new AlertDialog.Builder(this);  
                 builder.setMessage(R.string.deleteContact)  
                         .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {  
 public void onClick(DialogInterface dialog, int id) {  
 mydb.deleteContact(id_To_Update);  
                                 Toast.makeText(getApplicationContext(), "Deleted Successfully", Toast.LENGTH_SHORT).show();  
                                 Intent intent = new Intent(getApplicationContext(), MainActivity.class);  
                                 startActivity(intent);  
                             }  
                         })  
                         .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {  
 public void onClick(DialogInterface dialog, int id) {  
 // User cancelled the dialog  
 }  
                         });  
                 AlertDialog d = builder.create();  
                 d.setTitle("Are you sure ?");  
                 d.show();  
   
 return true;  
 default:  
 return super.onOptionsItemSelected(item);  
   
         }  
     }  
   
 public void saveData(View view) {  
 /*, */  
 /*        mydb.addContact(name.getText().toString(),email.getText().toString(), street.getText().toString(), place.getText().toString(), phone.getText().toString()); 
         finish();*/  
 Bundle extras = getIntent().getExtras();  
 if (extras != null) {  
 int Value = extras.getInt("id");  
 if (Value > 0) {  
 if (mydb.updateStudentContact(id_To_Update, name.getText().toString(), phone.getText().toString(), street.getText().toString(),email.getText().toString(), place.getText().toString())) {  
                     Toast.makeText(getApplicationContext(), "Successfully Updated", Toast.LENGTH_SHORT).show();  
                     Intent intent = new Intent(getApplicationContext(), MainActivity.class);  
                     startActivity(intent);  
                 } else {  
                     Toast.makeText(getApplicationContext(), "Record not updated", Toast.LENGTH_SHORT).show();  
                 }  
             } else {  
 if (mydb.addStudentContact(name.getText().toString(), phone.getText().toString(),street.getText().toString(), email.getText().toString(),  place.getText().toString())) {  
                     Toast.makeText(getApplicationContext(), "Successfully Added", Toast.LENGTH_SHORT).show();  
                 } else {  
                     Toast.makeText(getApplicationContext(), "Record not added", Toast.LENGTH_SHORT).show();  
                 }  
                 Intent intent = new Intent(getApplicationContext(), MainActivity.class);  
                 startActivity(intent);  
             }  
         }  
     }  
 }  

داخل پوشه ی string نام های مربوط مثل ویرایش کاربر که قرار است نمایش داده شود در این فایل می نویسیم:

<?xml version="1.0" encoding="utf-8"?>  
 <resources>  
     <string name="app_name">ContactApp</string>  
   
     <string name="hello_world">Hello world!</string>  
     <string name="action_settings">Settings</string>  
     <string name="title_activity_display_contact">DisplayContact</string>  
     <string name="Add_New">Add New</string>  
     <string name="edit">Edit Contact</string>  
     <string name="delete">Delete Contact</string>  
     <string name="name">Name</string>  
     <string name="phone">Phone</string>  
     <string name="email">Email</string>  
     <string name="street">Street</string>  
     <string name="country">City/State/Zip</string>  
     <string name="save">Save Contact</string>  
     <string name="deleteContact">Are you sure, you want to delete it.</string>  
     <string name="yes">Yes</string>  
     <string name="no">No</string>  
 </resources> 

داخل کلاس mainactivity ابتدا یک شی از کلاس dbhelper ایجاد نمایید، با استفاده از متد getAllStudentContacts اطلاعات داخل یک listview نمایش داده خواهد شد.

اجرا نمایید به صورت زیر خواهد بود:

اگر 3 نقطه ای که در بالا قرار دارد همان منوی activity شما را بزنید یک انتخاب برای افزودن می آید.

زمانی که اطلاعات را پر نمایید.

زمانی که ذخیره شود به صورت زیر خواهد شد:

اگر بخواهید یک رکورد را حذف یا ویرایش نمایید با انتخاب رکورد مورد نظر می توانید این کار را انجام دهید.

حالا دیتابیس مورد نظر را داخل قسمت Android Device Monitor می بینید.

در تصویر بالا یک آیکون هست که دایره ی قرمز رنگ کشیده شده است آن را می زنید و پایگاه داده مورد نظر را انتخاب نمایید.

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید