27 July 2013

ตัวอย่างการจัดการข้อมูลในฐานข้อมูลเบื้องต้น [ดู เพิ่ม แก้ไข ลบ]

Updated on
        ถึงแม้ว่าเจ้าของบล็อกจะเคยพูดถึงฐานข้อมูลไปเยอะแล้ว แต่ก็ยังมีผู้ที่หลงเข้ามาอ่านหลายๆคนที่ไม่ค่อยเข้าใจอยู่ดี เจ้าของบล็อกเลยตัวอย่างฐานข้อมูลขึ้นมาให้ศึกษา โดยเป็นพื้นฐานในการแสดงข้อมูลจากฐานข้อมูล การเพิ่มข้อมูล การลบข้อมูล และการแก้ไขข้อมูล


        สำหรับฐานข้อมูลก็จะประกอบด้วยหน้าหลักๆด้วยกันดังนี้

หน้าเมนูหลัก


หน้าดูข้อมูล



หน้าเพิ่มข้อมูล



หน้าแก้ไขและลบข้อมูล
(เหมือนกับหน้าดูข้อมูลแต่กดเพื่อแก้ไขได้)


กดเพื่อลบ


กดเพื่อแก้ไข


        หมายเหตุ - สำหรับโค๊ด เนื่องจากแต่ละแถวจะยาวมากเกินไป ตัดคำขึ้นบรรทัดใหม่ไม่ได้ เลยลงไปทั้งอย่างนั้นเลยนะ

        ก่อนอื่นก็พูดถึงหน้าข้อมูลก่อน ซึ่งไม่มีอะไรมาก แค่ Button สามตัวที่ Intent ไปแต่ละหน้าตามที่กำหนดไว้

Main.java
package app.akexorcist.studentdatabase;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Main extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        DatabaseStudent mHelper = new DatabaseStudent(this);
        SQLiteDatabase mDb = mHelper.getWritableDatabase();
        mHelper.close();
        mDb.close();
        
        Button buttonView = (Button)findViewById(R.id.buttonView);
        buttonView.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), ViewStudent.class);
                startActivity(intent);
            }
        });
        
        Button buttonAdd = (Button)findViewById(R.id.buttonAdd);
        buttonAdd.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), AddStudent.class);
                startActivity(intent);
            }
        });
        
        Button buttonEdit = (Button)findViewById(R.id.buttonEdit);
        buttonEdit.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), EditStudent.class);
                startActivity(intent);
            }
        });
    }
}


main.xml
<LinearLayout 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:gravity="center"
    android:orientation="vertical" >

    <Button
        android:id="@+id/buttonView"
        android:layout_width="100dp"
        android:layout_height="70dp"
        android:layout_margin="10dp"
        android:text="View Student" />

    <Button
        android:id="@+id/buttonAdd"
        android:layout_width="100dp"
        android:layout_height="70dp"
        android:layout_margin="10dp"
        android:text="Add Student" />

    <Button
        android:id="@+id/buttonEdit"
        android:layout_width="100dp"
        android:layout_height="70dp"
        android:layout_margin="10dp"
        android:text="Edit Student" />

</LinearLayout>


        ต่อมาก็คือคลาสฐานข้อมูล ซึ่งก็คงไม่มีอะไรต้องอธิบายมากเช่นกัน หลักๆเลยก็คือ ฐานข้อมูลชื่อว่า MyStudent เป็นฐานข้อมูลเวอร์ชัน 1 กำหนดชื่อตารางว่า Student โดยประกอบด้วย 4 คอลัมน์หลักๆคือ _id,  name, last_name และ school ที่เพิ่มฐานข้อมูลไว้แล้วตัวนึง

DatabaseStudent.java
package app.akexorcist.studentdatabase;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

class DatabaseStudent extends SQLiteOpenHelper {
    private static final String DB_NAME = "MyStudent";
    private static final int DB_VERSION = 1;
    
    public static final String TABLE_NAME = "Student";

    public static final String COL_NAME = "name";
    public static final String COL_LASTNAME = "last_name";
    public static final String COL_SCHOOL = "school";
    
    public DatabaseStudent(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " 
                + COL_NAME + " TEXT, " + COL_LASTNAME + " TEXT, " + COL_SCHOOL + " TEXT);");
        db.execSQL("INSERT INTO " + TABLE_NAME + " (" + COL_NAME + ", " + COL_LASTNAME + ", " 
                + COL_SCHOOL + ") VALUES ('Sleeping'" + ", 'For Less', 'Android School');");
    }
    
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

        ต่อมาก็คือหน้าสำหรับแสดงข้อมูลนักเรียนที่มีอยู่ โดยแสดงบน List View เหมือนตัวอย่างทั่วๆไปก็ใช้ Cursor ดึงข้อมูลมาทีละ Row จนครบ

ViewStudent.java
package app.akexorcist.studentdatabase;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ViewStudent extends Activity {
    DatabaseStudent mHelper;
    SQLiteDatabase mDb;
    Cursor mCursor;
    ListView listStudent;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view);
        
        mHelper = new DatabaseStudent(this);
        mDb = mHelper.getReadableDatabase();
        
        mCursor = mDb.rawQuery("SELECT * FROM " + DatabaseStudent.TABLE_NAME, null);
        
        ArrayList<String> arr_list = new ArrayList<String>();
        mCursor.moveToFirst();
        while(!mCursor.isAfterLast() ){
            arr_list.add("ชื่อ : " + mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_NAME)) 
                    + "\t\t" + mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_LASTNAME)) 
                    + "\nโรงเรียน : " + mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_SCHOOL)));
            mCursor.moveToNext();    
        }

        ArrayAdapter<String> adapterDir = new ArrayAdapter<String>(getApplicationContext(), R.layout.my_listview, arr_list);
        
        listStudent = (ListView)findViewById(R.id.listStudent);
        listStudent.setAdapter(adapterDir);
        listStudent.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                mCursor.moveToPosition(arg2);

                String name = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_NAME));
                String lastname = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_LASTNAME));
                String school = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_SCHOOL));
                
                AlertDialog.Builder builder = new AlertDialog.Builder(ViewStudent.this);
                builder.setTitle("ข้อมูลนักเรียน");
                builder.setMessage("ชื่อ : " + name + "\n\nนามสกุล : " + lastname + "\n\nโรงเรียน : " + school);
                builder.setNeutralButton("OK", null);
                builder.show();
            }
        });
    }
    
    public void onStop() {
        super.onStop();
        mHelper.close();
        mDb.close();
    }
}


view.xml
<LinearLayout 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:orientation="horizontal" >

    <ListView
        android:id="@+id/listStudent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp" />

</LinearLayout>


        ต่อมาก็คือการเพิ่มข้อมูลลงในฐานข้อมูล ก็จะมี Edit Text ทั้งสามสำหรับใส่ชื่อ นามสกุล และโรงเรียน แล้วก็ Get ค่ามาเป็น String แล้วรวมลงในคำสั่ง INSERT

AddStudent.java
package app.akexorcist.studentdatabase;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AddStudent extends Activity {
    DatabaseStudent mHelper;
    SQLiteDatabase mDb;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add);

        mHelper = new DatabaseStudent(this);
        mDb = mHelper.getWritableDatabase();
        
        final EditText editName = (EditText)findViewById(R.id.editName);
        final EditText editLastName = (EditText)findViewById(R.id.editLastName);
        final EditText editSchool = (EditText)findViewById(R.id.editSchool);
        
        Button buttonAdd = (Button)findViewById(R.id.buttonAdd);
        buttonAdd.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String name = editName.getText().toString();
                String lastname = editLastName.getText().toString();
                String school = editSchool.getText().toString();
                
                if(name.length() != 0 && lastname.length() != 0 && school.length() != 0 ) {
                    
                    Cursor mCursor = mDb.rawQuery("SELECT * FROM " + DatabaseStudent.TABLE_NAME 
                            + " WHERE " + DatabaseStudent.COL_NAME + "='" + name + "'" 
                            + " AND " + DatabaseStudent.COL_LASTNAME + "='" + lastname + "'" 
                            + " AND " + DatabaseStudent.COL_SCHOOL + "='" + school + "'", null);
                    
                    if(mCursor.getCount() == 0) {
                        mDb.execSQL("INSERT INTO " + DatabaseStudent.TABLE_NAME + " (" 
                                + DatabaseStudent.COL_NAME + ", " + DatabaseStudent.COL_LASTNAME 
                                + ", " + DatabaseStudent.COL_SCHOOL + ") VALUES ('" + name 
                                + "', '" + lastname + "', '" + school + "');"); 

                        editName.setText("");
                        editLastName.setText("");
                        editSchool.setText("");
                        
                        Toast.makeText(getApplicationContext(), "เพิ่มข้อมูลนักเรียนเรียบร้อยแล้ว"
                                , Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(getApplicationContext(), "คุณมีข้อมูลนักเรียนคนนี้อยู่แล้ว"
                                , Toast.LENGTH_SHORT).show();
                    }
                } else {
                    Toast.makeText(getApplicationContext(), "กรุณาใส่ข้อมูลนักเรียนให้ครบทุกช่อง"
                            , Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    
    public void onStop() {
        super.onStop();
        mHelper.close();
        mDb.close();
    }
}


add.xml
<LinearLayout 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:gravity="center"
    android:orientation="horizontal" >
    <requestFocus />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_margin="30dp" >

        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ชื่อ "
                android:textSize="20sp" />
    
            <EditText
                android:id="@+id/editName"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:singleLine="true" />
            
        </LinearLayout>
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="นามสกุล "
                android:textSize="20sp" />
    
            <EditText
                android:id="@+id/editLastName"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:singleLine="true" />
            
        </LinearLayout>
        <LinearLayout 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="โรงเรียน  "
                android:textSize="20sp" />
    
            <EditText
                android:id="@+id/editSchool"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:singleLine="true" />
            
        </LinearLayout>

        <Button
            android:id="@+id/buttonAdd"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="20dp"
            android:text="Add" />

    </LinearLayout>

</LinearLayout>


        ต่อมาก็คือหน้าแก้ไขข้อมูลนักเรียน ซึ่งจะมีรายชื่อนักเรียนแสดงบน List View ถ้าต้องการแก้ไขข้อมูลคนใดก็ให้กดที่แถวนั้นๆ ก็จะ Intent ไปหน้าแก้ไขข้อมูลอีกที แต่ถ้าต้องการลบข้อมูลทิ้งก็เพียงแค่กดค้างไว้ แล้วจะมี Dialog ขึ้นมาถามว่าจะลบหรือไม่

EditStudent.java
package app.akexorcist.studentdatabase;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class EditStudent extends Activity {
    DatabaseStudent mHelper;
    SQLiteDatabase mDb;
    Cursor mCursor;
    ListView listStudent;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit);
    }
    
    public void onResume() {
        super.onResume();
        
        mHelper = new DatabaseStudent(this);
        mDb = mHelper.getWritableDatabase();
        
        mCursor = mDb.rawQuery("SELECT * FROM " + DatabaseStudent.TABLE_NAME, null);
        
        listStudent = (ListView)findViewById(R.id.listStudent);
        listStudent.setAdapter(updateListView());
        listStudent.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                mCursor.moveToPosition(arg2);

                String name = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_NAME));
                String lastname = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_LASTNAME));
                String school = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_SCHOOL));
                
                Intent intent = new Intent(getApplicationContext(), UpdateStudent.class);
                intent.putExtra("NAME", name);
                intent.putExtra("LASTNAME", lastname);
                intent.putExtra("SCHOOL", school);
                startActivity(intent);
            }
        });
        
        listStudent.setOnItemLongClickListener(new OnItemLongClickListener() {
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                mCursor.moveToPosition(arg2);
                
                AlertDialog.Builder builder = new AlertDialog.Builder(EditStudent.this);
                builder.setTitle("ลบข้อมูลนักเรียน");
                builder.setMessage("คุณต้องการลบข้อมูลนักเรียนคนนี้ใช่หรือไม่?");
                builder.setPositiveButton("ใช่", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        String name = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_NAME));
                        String lastname = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_LASTNAME));
                        String school = mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_SCHOOL));
                            
                        mDb.execSQL("DELETE FROM " + DatabaseStudent.TABLE_NAME 
                                + " WHERE " + DatabaseStudent.COL_NAME + "='" + name + "'"
                                + " AND " + DatabaseStudent.COL_LASTNAME + "='" + lastname + "'"
                                + " AND " + DatabaseStudent.COL_SCHOOL + "='" + school + "';"); 
                            
                        mCursor.requery();

                        listStudent.setAdapter(updateListView());
                        
                        Toast.makeText(getApplicationContext(),"ลบข้อมูลนักเรียนเรียบร้อย"
                                , Toast.LENGTH_SHORT).show();
                    }
                });
                    
                builder.setNegativeButton("ไม่", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });
                builder.show();
                
                return true;
            }
        });
    }
    
    public void onStop() {
        super.onStop();
        mHelper.close();
        mDb.close();
    }
    
    public ArrayAdapter<String> updateListView() {
        ArrayList<String> arr_list = new ArrayList<String>();
        mCursor.moveToFirst();
        while(!mCursor.isAfterLast()){
            arr_list.add("ชื่อ : " + mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_NAME)) + "\t\t" 
                + mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_LASTNAME)) + "\n" 
                + "โรงเรียน : " + mCursor.getString(mCursor.getColumnIndex(DatabaseStudent.COL_SCHOOL)));
            mCursor.moveToNext();    
        }

        ArrayAdapter<String> adapterDir = new ArrayAdapter<String>(getApplicationContext() 
                , R.layout.my_listview, arr_list);
        return adapterDir;
    }
}


edit.xml
<LinearLayout 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:orientation="horizontal" >

    <ListView
        android:id="@+id/listStudent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp" >

    </ListView>

</LinearLayout>


        และสุดท้าย หน้าแก้ไขข้อมูลของเดิม ที่มาจาก Intent จากหน้า EditStudent โดยที่หน้านี้จะมี Edit Text อยู่สามตัวเหมือนหน้าเพิ่มข้อมูล แต่จะดึงข้อมูลนักเรียนคนที่ต้องการแก้ไขมาใส่ในช่องก่อน มีปุ่มกากบาทที่อยู่ขวามือของแต่ละแถวเพื่อลบข้อความใน Edit Text และเมื่อแก้ไขข้อมูลเสร็จแล้ว ทำการอัพเดทโดยค้นหาชื่อนักเรียนที่แก้ไข แล้วทำการแทนที่ด้วยข้อมูลใหม่ทับลงไปก็เป็นอันเรียบร้อย

UpdateStudent.java
package app.akexorcist.studentdatabase;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class UpdateStudent extends Activity {
    DatabaseStudent mHelper;
    SQLiteDatabase mDb;
    Cursor mCursor;
    String name, lastname, school;
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.update);

        name = getIntent().getExtras().getString("NAME");
        lastname = getIntent().getExtras().getString("LASTNAME");
        school = getIntent().getExtras().getString("SCHOOL");

        mHelper = new DatabaseStudent(this);
        mDb = mHelper.getWritableDatabase();
        
        mCursor = mDb.rawQuery("SELECT * FROM " + DatabaseStudent.TABLE_NAME 
                + " WHERE " + DatabaseStudent.COL_NAME + "='" + name + "'" 
                + " AND " + DatabaseStudent.COL_LASTNAME  + "='" + lastname + "'"
                + " AND " + DatabaseStudent.COL_SCHOOL + "='" + school  + "'", null);
        
        final EditText editName = (EditText)findViewById(R.id.editName);
        editName.setText(name);
        final EditText editLastName = (EditText)findViewById(R.id.editLastName);
        editLastName.setText(lastname);
        final EditText editSchool = (EditText)findViewById(R.id.editSchool);
        editSchool.setText(school);
        
        Button buttonUpdate = (Button)findViewById(R.id.buttonUpdate);
        buttonUpdate.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                String nameUpdate = editName.getText().toString();
                String lastnameUpdate = editLastName.getText().toString();
                String schoolUpdate = editSchool.getText().toString();
                
                if(name.length() != 0 && lastname.length() != 0 && school.length() != 0 ) {
                    mDb.execSQL("UPDATE " + DatabaseStudent.TABLE_NAME  + " SET "
                            + DatabaseStudent.COL_NAME + "='" + nameUpdate + "', "
                            + DatabaseStudent.COL_LASTNAME + "='" + lastnameUpdate + "', " 
                            + DatabaseStudent.COL_SCHOOL + "='" + schoolUpdate 
                            + "' WHERE " + DatabaseStudent.COL_NAME + "='" + name + "'"
                            + " AND " + DatabaseStudent.COL_LASTNAME + "='" + lastname + "'"
                            + " AND " + DatabaseStudent.COL_SCHOOL + "='" + school + "';");

                    Toast.makeText(getApplicationContext(), "แก้ไขข้อมูลนักเรียนเรียบร้อยแล้ว"
                            , Toast.LENGTH_SHORT).show();
                    
                    finish();
                    
                } else {
                    Toast.makeText(getApplicationContext(), "กรุณาใส่ข้อมูลนักเรียนให้ครบทุกช่อง"
                            , Toast.LENGTH_SHORT).show();
                }
            }
        });

        Button buttonNameClear = (Button)findViewById(R.id.buttonNameClear);
        buttonNameClear.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                editName.setText("");
            }
        });
        
        Button buttonLastNameClear = (Button)findViewById(R.id.buttonLastNameClear);
        buttonLastNameClear.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                editLastName.setText("");
            }
        });
        
        Button buttonSchoolClear = (Button)findViewById(R.id.buttonSchoolClear);
        buttonSchoolClear.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                editSchool.setText("");
            }
        });
    }
    
    public void onStop() {
        super.onStop();
        mHelper.close();
        mDb.close();
    }
}

update.xml
<LinearLayout 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:gravity="center"
    android:orientation="horizontal" >
    <requestFocus />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_margin="30dp" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="ชื่อ "
                android:textSize="20sp" />
    
            <EditText
                android:id="@+id/editName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:singleLine="true"
                android:textSize="20sp" />

            <Button
                android:id="@+id/buttonNameClear"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:text="X" />
            
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="นามสกุล "
                android:textSize="20sp" />
    
            <EditText
                android:id="@+id/editLastName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:singleLine="true"
                android:textSize="20sp" />

            <Button
                android:id="@+id/buttonLastNameClear"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:text="X" />
            
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:orientation="horizontal" >
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="โรงเรียน  "
                android:textSize="20sp" />
    
            <EditText
                android:id="@+id/editSchool"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:singleLine="true"
                android:textSize="20sp" />

            <Button
                android:id="@+id/buttonSchoolClear"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:text="X" />
            
        </LinearLayout>

        <Button
            android:id="@+id/buttonUpdate"
            android:layout_width="90dp"
            android:layout_height="80dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="20dp"
            android:text="Update" />

    </LinearLayout>

</LinearLayout>


my_listview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="5dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="5dp"
    android:cacheColorHint="#00000000"
    android:drawSelectorOnTop="true"
    android:text="aaaaa"
    android:textColor="#000000"
    android:textSize="20sp" />


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="app.akexorcist.studentdatabase"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="Main"
            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="ViewStudent" />
        <activity android:name="AddStudent" />
        <activity android:name="EditStudent" />
        <activity android:name="UpdateStudent" />
    </application>

</manifest>

        ก็คงไม่มีอะไรจะอธิบายมากนัก เพราะเน้นเป็นตัวอย่างมากกว่า อยากให้ผู้ที่หลงเข้ามาอ่านเอาไปดูเป็นตัวอย่างกันมากกว่า สำหรับผู้ที่หลงเข้ามาอ่านคนใดที่ต้องการไฟล์ตัวอย่าง สามารถดาวน์โหลดได้จาก Student Database [Google Drive]