Android - ฐานข้อมูล SQLite

SQLite เป็นฐานข้อมูล SQL แบบเปิดที่จัดเก็บข้อมูลลงในไฟล์ข้อความบนอุปกรณ์ Android มาพร้อมกับการใช้งานฐานข้อมูล SQLite ในตัว

SQLite รองรับคุณสมบัติฐานข้อมูลเชิงสัมพันธ์ทั้งหมด ในการเข้าถึงฐานข้อมูลนี้คุณไม่จำเป็นต้องสร้างการเชื่อมต่อใด ๆ สำหรับมันเช่น JDBC, ODBC เป็นต้น

ฐานข้อมูล - แพ็คเกจ

แพ็กเกจหลักคือ android.database.sqlite ที่มีคลาสสำหรับจัดการฐานข้อมูลของคุณเอง

ฐานข้อมูล - การสร้าง

ในการสร้างฐานข้อมูลคุณต้องเรียกเมธอดนี้ว่า openOrCreateDatabase โดยใช้ชื่อฐานข้อมูลและโหมดเป็นพารามิเตอร์ ส่งคืนอินสแตนซ์ของฐานข้อมูล SQLite ซึ่งคุณต้องได้รับในออบเจ็กต์ของคุณเองไวยากรณ์ของมันได้รับด้านล่าง

SQLiteDatabase mydatabase = openOrCreateDatabase("your database name",MODE_PRIVATE,null);

นอกเหนือจากนี้ยังมีฟังก์ชั่นอื่น ๆ ในแพ็คเกจฐานข้อมูลที่ทำงานนี้ ตามรายการด้านล่าง

ซีเนียร์ No วิธีการและคำอธิบาย
1

openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler)

วิธีนี้เปิดฐานข้อมูลที่มีอยู่ด้วยโหมดแฟล็กที่เหมาะสมเท่านั้น โหมดแฟล็กทั่วไปอาจเป็น OPEN_READWRITE OPEN_READONLY

2

openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags)

คล้ายกับวิธีการข้างต้นเนื่องจากยังเปิดฐานข้อมูลที่มีอยู่ แต่ไม่ได้กำหนดตัวจัดการใด ๆ เพื่อจัดการกับข้อผิดพลาดของฐานข้อมูล

3

openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)

ไม่เพียง แต่เปิดขึ้น แต่สร้างฐานข้อมูลหากไม่มีอยู่ วิธีนี้เทียบเท่ากับเมธอด openDatabase

4

openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory)

วิธีนี้คล้ายกับวิธีการข้างต้น แต่ใช้วัตถุ File เป็นเส้นทางแทนที่จะเป็นสตริง เทียบเท่ากับ file.getPath ()

ฐานข้อมูล - การแทรก

เราสามารถสร้างตารางหรือแทรกข้อมูลลงในตารางโดยใช้เมธอด execSQL ที่กำหนดในคลาส SQLiteDatabase ไวยากรณ์ได้รับด้านล่าง

mydatabase.execSQL("CREATE TABLE IF NOT EXISTS TutorialsPoint(Username VARCHAR,Password VARCHAR);");
mydatabase.execSQL("INSERT INTO TutorialsPoint VALUES('admin','admin');");

สิ่งนี้จะแทรกค่าบางอย่างลงในตารางของเราในฐานข้อมูลของเรา อีกวิธีหนึ่งที่ใช้งานได้เหมือนกัน แต่รับพารามิเตอร์เพิ่มเติมบางส่วนได้รับด้านล่าง

ซีเนียร์ No วิธีการและคำอธิบาย
1

execSQL(String sql, Object[] bindArgs)

วิธีนี้ไม่เพียง แต่แทรกข้อมูลเท่านั้น แต่ยังใช้เพื่ออัปเดตหรือแก้ไขข้อมูลที่มีอยู่แล้วในฐานข้อมูลโดยใช้อาร์กิวเมนต์ผูก

ฐานข้อมูล - กำลังดึงข้อมูล

เราสามารถดึงข้อมูลอะไรก็ได้จากฐานข้อมูลโดยใช้อ็อบเจ็กต์ของคลาส Cursor เราจะเรียกเมธอดของคลาสนี้เรียกว่า rawQuery และจะส่งคืนผลลัพธ์โดยเคอร์เซอร์ชี้ไปที่ตาราง เราสามารถเลื่อนเคอร์เซอร์ไปข้างหน้าและดึงข้อมูลได้

Cursor resultSet = mydatbase.rawQuery("Select * from TutorialsPoint",null);
resultSet.moveToFirst();
String username = resultSet.getString(0);
String password = resultSet.getString(1);

มีฟังก์ชันอื่น ๆ ที่มีอยู่ในคลาส Cursor ที่ช่วยให้เราดึงข้อมูลได้อย่างมีประสิทธิภาพ ซึ่งรวมถึง

ซีเนียร์ No วิธีการและคำอธิบาย
1

getColumnCount()

วิธีนี้จะส่งคืนจำนวนคอลัมน์ทั้งหมดของตาราง

2

getColumnIndex(String columnName)

วิธีนี้จะส่งคืนหมายเลขดัชนีของคอลัมน์โดยระบุชื่อของคอลัมน์

3

getColumnName(int columnIndex)

วิธีนี้จะส่งคืนชื่อของคอลัมน์โดยระบุดัชนีของคอลัมน์

4

getColumnNames()

วิธีนี้ส่งคืนอาร์เรย์ของชื่อคอลัมน์ทั้งหมดของตาราง

5

getCount()

วิธีนี้จะคืนค่าจำนวนแถวทั้งหมดในเคอร์เซอร์

6

getPosition()

วิธีนี้จะคืนตำแหน่งปัจจุบันของเคอร์เซอร์ในตาราง

7

isClosed()

วิธีนี้จะคืนค่าจริงหากเคอร์เซอร์ถูกปิดและส่งกลับเท็จเป็นอย่างอื่น

ฐานข้อมูล - คลาสตัวช่วย

สำหรับการจัดการการดำเนินการทั้งหมดที่เกี่ยวข้องกับฐานข้อมูลได้มีการกำหนดคลาสตัวช่วยและเรียกว่า SQLiteOpenHelper จัดการการสร้างและอัปเดตฐานข้อมูลโดยอัตโนมัติ ไวยากรณ์ได้รับด้านล่าง

public class DBHelper extends SQLiteOpenHelper {
   public DBHelper(){
      super(context,DATABASE_NAME,null,1);
   }
   public void onCreate(SQLiteDatabase db) {}
   public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {}
}

ตัวอย่าง

นี่คือตัวอย่างการสาธิตการใช้ฐานข้อมูล SQLite มันสร้างแอปพลิเคชันผู้ติดต่อพื้นฐานที่อนุญาตให้แทรกลบและแก้ไขผู้ติดต่อ

ในการทดลองกับตัวอย่างนี้คุณต้องเรียกใช้สิ่งนี้บนอุปกรณ์จริงที่รองรับกล้อง

ขั้นตอน คำอธิบาย
1 คุณจะใช้ Android studio เพื่อสร้างแอปพลิเคชัน Android ภายใต้แพ็คเกจ com.example.sairamkrishna.myapplication
2 แก้ไขไฟล์ src / MainActivity.java เพื่อรับการอ้างอิงของคอมโพเนนต์ XML ทั้งหมดและเติมข้อมูลผู้ติดต่อใน listView
3 สร้าง src / DBHelper.java ใหม่ที่จะจัดการงานฐานข้อมูล
4 สร้างกิจกรรมใหม่เป็น DisplayContact.java ซึ่งจะแสดงรายชื่อบนหน้าจอ
5 แก้ไข res / layout / activity_main เพื่อเพิ่มคอมโพเนนต์ XML ที่เกี่ยวข้อง
6 แก้ไข res / layout / activity_display_contact.xml เพื่อเพิ่มคอมโพเนนต์ XML ที่เกี่ยวข้อง
7 แก้ไข res / values ​​/ string.xml เพื่อเพิ่มส่วนประกอบสตริงที่จำเป็น
8 แก้ไข res / menu / display_contact.xml เพื่อเพิ่มส่วนประกอบเมนูที่จำเป็น
9 สร้างเมนูใหม่เป็น res / menu / mainmenu.xml เพื่อเพิ่มตัวเลือกแทรกผู้ติดต่อ
10 เรียกใช้แอปพลิเคชันและเลือกอุปกรณ์ Android ที่ใช้งานอยู่และติดตั้งแอปพลิเคชันบนแอปพลิเคชันและตรวจสอบผลลัพธ์

ต่อไปนี้เป็นเนื้อหาของการแก้ไข MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.content.Context;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends ActionBarActivity {
   public final static String EXTRA_MESSAGE = "MESSAGE";
   private ListView obj;
   DBHelper mydb;
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      mydb = new DBHelper(this);
      ArrayList array_list = mydb.getAllCotacts();
      ArrayAdapter arrayAdapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1, array_list);
      
      obj = (ListView)findViewById(R.id.listView1);
      obj.setAdapter(arrayAdapter);
      obj.setOnItemClickListener(new OnItemClickListener(){
         @Override
         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
            // TODO Auto-generated method stub
            int id_To_Search = arg2 + 1;
            
            Bundle dataBundle = new Bundle();
            dataBundle.putInt("id", id_To_Search);
            
            Intent intent = new Intent(getApplicationContext(),DisplayContact.class);
            
            intent.putExtras(dataBundle);
            startActivity(intent);
         }
      });
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item){
      super.onOptionsItemSelected(item);
      
      switch(item.getItemId()) {
         case R.id.item1:Bundle dataBundle = new Bundle();
         dataBundle.putInt("id", 0);
         
         Intent intent = new Intent(getApplicationContext(),DisplayContact.class);
         intent.putExtras(dataBundle);
         
         startActivity(intent);
         return true;
         default:
         return super.onOptionsItemSelected(item);
      }
   }
   
   public boolean onKeyDown(int keycode, KeyEvent event) {
      if (keycode == KeyEvent.KEYCODE_BACK) {
         moveTaskToBack(true);
      }
      return super.onKeyDown(keycode, event);
   }
}

ต่อไปนี้เป็นเนื้อหาที่แก้ไขของกิจกรรมการติดต่อที่แสดง DisplayContact.java

package com.example.sairamkrishna.myapplication;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;

import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;

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 Activity {
   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(); 
      if(extras !=null) {
         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 nam = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_NAME));
            String phon = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_PHONE));
            String emai = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_EMAIL));
            String stree = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_STREET));
            String plac = rs.getString(rs.getColumnIndex(DBHelper.CONTACTS_COLUMN_CITY));
            
            if (!rs.isClosed())  {
               rs.close();
            }
            Button b = (Button)findViewById(R.id.button1);
            b.setVisibility(View.INVISIBLE);

            name.setText((CharSequence)nam);
            name.setFocusable(false);
            name.setClickable(false);

            phone.setText((CharSequence)phon);
            phone.setFocusable(false); 
            phone.setClickable(false);

            email.setText((CharSequence)emai);
            email.setFocusable(false);
            email.setClickable(false);

            street.setText((CharSequence)stree);
            street.setFocusable(false); 
            street.setClickable(false);

            place.setText((CharSequence)plac);
            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.display_contact, menu);
         } else{
            getMenuInflater().inflate(R.menu.menu_main menu);
         }
      }
      return true;
   }

   public boolean onOptionsItemSelected(MenuItem item) { 
      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 run(View view) {	
      Bundle extras = getIntent().getExtras();
      if(extras !=null) {
         int Value = extras.getInt("id");
         if(Value>0){
            if(mydb.updateContact(id_To_Update,name.getText().toString(),
               phone.getText().toString(), email.getText().toString(), 
				   street.getText().toString(), place.getText().toString())){
               Toast.makeText(getApplicationContext(), "Updated", Toast.LENGTH_SHORT).show();	
               Intent intent = new Intent(getApplicationContext(),MainActivity.class);
               startActivity(intent);
            } else{
               Toast.makeText(getApplicationContext(), "not Updated", Toast.LENGTH_SHORT).show();	
            }
         } else{
            if(mydb.insertContact(name.getText().toString(), phone.getText().toString(), 
				   email.getText().toString(), street.getText().toString(), 
				   place.getText().toString())){
                  Toast.makeText(getApplicationContext(), "done",
						   Toast.LENGTH_SHORT).show();	
            } else{
               Toast.makeText(getApplicationContext(), "not done", 
					   Toast.LENGTH_SHORT).show();	
            }
            Intent intent = new Intent(getApplicationContext(),MainActivity.class);
            startActivity(intent);
         }
      }
   }
}

ต่อไปนี้เป็นเนื้อหาของคลาสฐานข้อมูล DBHelper.java

package com.example.sairamkrishna.myapplication;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;

public class DBHelper extends SQLiteOpenHelper {

   public static final String DATABASE_NAME = "MyDBName.db";
   public static final String CONTACTS_TABLE_NAME = "contacts";
   public static final String CONTACTS_COLUMN_ID = "id";
   public static final String CONTACTS_COLUMN_NAME = "name";
   public static final String CONTACTS_COLUMN_EMAIL = "email";
   public static final String CONTACTS_COLUMN_STREET = "street";
   public static final String CONTACTS_COLUMN_CITY = "place";
   public static final String CONTACTS_COLUMN_PHONE = "phone";
   private HashMap hp;

   public DBHelper(Context context) {
      super(context, DATABASE_NAME , null, 1);
   }

   @Override
   public void onCreate(SQLiteDatabase db) {
      // TODO Auto-generated method stub
      db.execSQL(
         "create table contacts " +
         "(id integer primary key, name text,phone text,email text, street text,place text)"
      );
   }

   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      // TODO Auto-generated method stub
      db.execSQL("DROP TABLE IF EXISTS contacts");
      onCreate(db);
   }

   public boolean insertContact (String name, String phone, String email, String street,String place) {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();
      contentValues.put("name", name);
      contentValues.put("phone", phone);
      contentValues.put("email", email);	
      contentValues.put("street", street);
      contentValues.put("place", place);
      db.insert("contacts", null, contentValues);
      return true;
   }
   
   public Cursor getData(int id) {
      SQLiteDatabase db = this.getReadableDatabase();
      Cursor res =  db.rawQuery( "select * from contacts where id="+id+"", null );
      return res;
   }
   
   public int numberOfRows(){
      SQLiteDatabase db = this.getReadableDatabase();
      int numRows = (int) DatabaseUtils.queryNumEntries(db, CONTACTS_TABLE_NAME);
      return numRows;
   }
   
   public boolean updateContact (Integer id, String name, String phone, String email, String street,String place) {
      SQLiteDatabase db = this.getWritableDatabase();
      ContentValues contentValues = new ContentValues();
      contentValues.put("name", name);
      contentValues.put("phone", phone);
      contentValues.put("email", email);
      contentValues.put("street", street);
      contentValues.put("place", place);
      db.update("contacts", contentValues, "id = ? ", new String[] { Integer.toString(id) } );
      return true;
   }

   public Integer deleteContact (Integer id) {
      SQLiteDatabase db = this.getWritableDatabase();
      return db.delete("contacts", 
      "id = ? ", 
      new String[] { Integer.toString(id) });
   }
   
   public ArrayList<String> getAllCotacts() {
      ArrayList<String> array_list = new ArrayList<String>();
      
      //hp = new HashMap();
      SQLiteDatabase db = this.getReadableDatabase();
      Cursor res =  db.rawQuery( "select * from contacts", null );
      res.moveToFirst();
      
      while(res.isAfterLast() == false){
         array_list.add(res.getString(res.getColumnIndex(CONTACTS_COLUMN_NAME)));
         res.moveToNext();
      }
      return array_list;
   }
}

ต่อไปนี้เป็นเนื้อหาของไฟล์ res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
   android:layout_height="match_parent" 
   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=".MainActivity">

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textView"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp"
      android:text="Data Base" />

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials Point"
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:textSize="35dp"
      android:textColor="#ff16ff01" />

   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true"
      android:src="@drawable/logo"/>

   <ScrollView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/scrollView"
      android:layout_below="@+id/imageView"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true"
      android:layout_alignParentBottom="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true">
        
      <ListView
         android:id="@+id/listView1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
         android:layout_centerVertical="true" >
      </ListView>
		
   </ScrollView>

</RelativeLayout>

ต่อไปนี้เป็นเนื้อหาของไฟล์ res/layout/activity_display_contact.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:id="@+id/scrollView1"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   tools:context=".DisplayContact" >

   <RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="370dp"
      android:paddingBottom="@dimen/activity_vertical_margin"
      android:paddingLeft="@dimen/activity_horizontal_margin"
      android:paddingRight="@dimen/activity_horizontal_margin"
      android:paddingTop="@dimen/activity_vertical_margin">

      <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="run"
         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>

ต่อไปนี้เป็นเนื้อหาของไฟล์ res/value/string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">Address Book</string>
   <string name="action_settings">Settings</string>
   <string name="hello_world">Hello world!</string>
   <string name="Add_New">Add New</string>
   <string name="edit">Edit Contact</string>
   <string name="delete">Delete Contact</string>
   <string name="title_activity_display_contact">DisplayContact</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>

ต่อไปนี้เป็นเนื้อหาของไฟล์ res/menu/main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
   
   <item android:id="@+id/item1" 
      android:icon="@drawable/add"
      android:title="@string/Add_New" >
   </item>
   
</menu>

ต่อไปนี้เป็นเนื้อหาของไฟล์ res/menu/display_contact.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
   <item
      android:id="@+id/Edit_Contact"
      android:orderInCategory="100"
      android:title="@string/edit"/>
   
   <item
      android:id="@+id/Delete_Contact"
      android:orderInCategory="100"
      android:title="@string/delete"/>

</menu>

นี่คือค่าเริ่มต้น AndroidManifest.xml ของโครงการนี้

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >
   
   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name=".MainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      
      </activity>
      
      <activity android:name=".DisplayContact"/>
      
   </application>
</manifest>

มาลองเรียกใช้แอปพลิเคชันของคุณ ฉันถือว่าคุณได้เชื่อมต่ออุปกรณ์มือถือ Android จริงกับคอมพิวเตอร์ของคุณ หากต้องการเรียกใช้แอปจาก Android studio ให้เปิดไฟล์กิจกรรมของโครงการแล้วคลิก

ไอคอนเรียกใช้จากแถบเครื่องมือ ก่อนที่จะเริ่มแอปพลิเคชันของคุณ Android studio จะแสดงหน้าต่างต่อไปนี้เพื่อเลือกตัวเลือกที่คุณต้องการเรียกใช้แอปพลิเคชัน Android ของคุณ

เลือกอุปกรณ์มือถือของคุณเป็นตัวเลือกจากนั้นตรวจสอบอุปกรณ์มือถือของคุณซึ่งจะแสดงหน้าจอต่อไปนี้ -

ตอนนี้เปิดเมนูเสริมของคุณมันจะแสดงดังภาพด้านล่าง: Optional menu appears different places on different versions

คลิกที่ปุ่มเพิ่มของหน้าจอเมนูเพื่อเพิ่มผู้ติดต่อใหม่ จะแสดงหน้าจอต่อไปนี้ -

มันจะแสดงฟิลด์ต่อไปนี้ กรุณากรอกข้อมูลที่จำเป็นและคลิกที่บันทึกผู้ติดต่อ มันจะนำคุณกลับไปที่หน้าจอหลัก

ตอนนี้ sai ผู้ติดต่อของเราถูกเพิ่มแล้วเพื่อที่จะดูว่าฐานข้อมูลของคุณถูกสร้างขึ้นที่ไหน เปิดสตูดิโอ Android ของคุณเชื่อมต่อมือถือของคุณ ไปtools/android/android device monitor. ตอนนี้เรียกดูแท็บ File explorer ตอนนี้เรียกดูโฟลเดอร์นี้/data/data/<your.package.name>/databases<database-name>.