Android DeveloperDeveloperFeatured

เขียนแอพ Android การเชื่อมต่อ SQLite กับการ Delete ข้อมูล

บทเรียนเบื้องต้นสำหรับผู้พัฒนาแอพพลิเคชัน Android กับการใช้งาน SQLite ร่วมกับ Delte SQL เพื่อลบข้อมูลในตารางฐานข้อมูล SQLite แบบง่ายผ่านหน้า Intent Activity

ศึกษาบทเรียนก่อนหน้าก่อนจะได้เข้าใจครับ ที่นี่

ขั้นตอนเดิมๆ ครับสร้าง Blank Activity มาใหม่ตั้งชื่อว่า MainActivity3.java และ activity_main3.xml

Add New "Blank Activity" เข้าไป
Add New “Blank Activity” เข้าไป

ออกแบบหน้าจอ activity_main3.xml ดังนี้

ออกแบบ activity_main3.xml
ออกแบบ activity_main3.xml

ไฟล์ xml จะได้ดังนี้

<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="daydev.com.sqlitetut.MainActivity3">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="DELETE DATA"
        android:id="@+id/textView2"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="45dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/txtTitleName"
        android:layout_marginTop="47dp"
        android:width="300dp"
        android:textColor="#ffffe53b"
        android:layout_below="@+id/textView2"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Delete"
        android:id="@+id/delButton"
        android:layout_marginTop="37dp"
        android:width="300dp"
        android:layout_below="@+id/txtTitleName"
        android:layout_centerHorizontal="true"
        android:background="#ffff1d00" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Back To Home"
        android:id="@+id/backtohome"
        android:width="300dp"
        android:layout_below="@+id/delButton"
        android:layout_alignStart="@+id/delButton"
        android:layout_marginTop="79dp" />
</RelativeLayout>

ต่อมาไปที่ MainActivity.java เพิ่มส่วนของการแตะที่ ListView ตำแหน่ง Rows ให้เปลี่ยนหน้าไป MainActivity3.java พร้อมส่ง Parameter ชื่อเรื่องไปด้วยผ่าน Intent

listViewMovies.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                int itemPosition     = position;
                String  itemValue    = (String)listViewMovies.getItemAtPosition(position);
                Intent showPage = new Intent(MainActivity.this,MainActivity3.class);
                showPage.putExtra("title",""+itemValue+"");
                startActivity(showPage);
            }
        });

เปิดไฟล์ MainActivity3.java ขึ้นมาประกาศ Header ให้พร้อมตามนี้

import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
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;

ส่วนของการรับค่า Parameter ผ่าน Intent มาแสดงผล

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        this.setTitle("View and Delete data");

        final TextView txtTitle_show = (TextView)findViewById(R.id.txtTitleName);
        Intent intent= getIntent();
        final String txt_get_title = intent.getStringExtra("title");
        txtTitle_show.setText(txt_get_title);

        Button backHome = (Button)findViewById(R.id.backtohome);
        backHome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent showPage = new Intent(MainActivity3.this,MainActivity.class);
                startActivity(showPage);
            }
        });

        Button deleteData = (Button)findViewById(R.id.delButton);
        deleteData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               DeleteRow(txt_get_title);
            }
        });
    }

ประกาศตัวแปร Public ด้วยนะครับ

public class MainActivity3 extends ActionBarActivity {
    SQLiteDatabase sqliteMyDB;
    MyDbHelper myDataHelper;

ปุ่ม Delete มีฟังก์ชันดังนี้ เมื่อกดแล้วไปเรียกฟังก์ชัน DeleteRow(txt_get_title); มีการส่ง txt_get_title ไปเป็นตัวแปร

Button deleteData = (Button)findViewById(R.id.delButton);
        deleteData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               DeleteRow(txt_get_title);
            }
        });

เพิ่ม Public long ขึ้นมาใหม่ชื่อว่า DeleteRow() ใส่ code ดังนี้

public long DeleteRow(String dataTitle){
        try {
            myDataHelper = new MyDbHelper(this);
            ContentValues Val = new ContentValues();

            sqliteMyDB = myDataHelper.getWritableDatabase();
            long rows = sqliteMyDB.delete(myDataHelper.TABLE_NAME,"title=?",new String[] { String.valueOf(dataTitle) });

            sqliteMyDB.close();

            Toast.makeText(MainActivity3.this, "Success!", Toast.LENGTH_SHORT).show();
            return rows;

        } catch (Exception e) {
            return -1;
        }



    }

คำสั่งในการ ลบหลักๆ คือ WHERE เทียบกับ title=”” ในส่วนนี้

long rows = sqliteMyDB.delete(myDataHelper.TABLE_NAME,"title=?",new String[] { String.valueOf(dataTitle) });

ภาพรวม code ทั้งหมดของ MainActivity3.java

package daydev.com.sqlitetut;

import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
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 MainActivity3 extends ActionBarActivity {
    SQLiteDatabase sqliteMyDB;
    MyDbHelper myDataHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        this.setTitle("View and Delete data");

        final TextView txtTitle_show = (TextView)findViewById(R.id.txtTitleName);
        Intent intent= getIntent();
        final String txt_get_title = intent.getStringExtra("title");
        txtTitle_show.setText(txt_get_title);

        Button backHome = (Button)findViewById(R.id.backtohome);
        backHome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent showPage = new Intent(MainActivity3.this,MainActivity.class);
                startActivity(showPage);
            }
        });

        Button deleteData = (Button)findViewById(R.id.delButton);
        deleteData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               DeleteRow(txt_get_title);
            }
        });
    }

    public long DeleteRow(String dataTitle){
        try {
            myDataHelper = new MyDbHelper(this);
            ContentValues Val = new ContentValues();

            sqliteMyDB = myDataHelper.getWritableDatabase();
            long rows = sqliteMyDB.delete(myDataHelper.TABLE_NAME,"title=?",new String[] { String.valueOf(dataTitle) });

            sqliteMyDB.close();

            Toast.makeText(MainActivity3.this, "Success!", Toast.LENGTH_SHORT).show();
            return rows;

        } catch (Exception e) {
            return -1;
        }



    }


    @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_activity3, 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.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

ทดสอบลอง Run ตัวแอพพลิเคชันของเราครับ แตะที่ 500 Days of Summer

android-sqlite-add-7

กด Delete ซะ แล้วกลับไปหน้าแรก

android-sqlite-delete-2

ข้อมูลแถวใหม่ที่เพิ่งเพิ่มเข้าไปหายไปแล้ว

android-sqlite-delete-3

ศึกษาบทเรียนเก่าๆ ได้ที่ https://www.daydev.com/category/developer/android-developer

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน