Android DeveloperDeveloperFeatured

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

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

ก่อนจะศึกษาบทความนี้แนะนำให้อ่านบทความนี้ก่อน

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

เราจะรู้แล้วว่าการนำข้อมูลจาก SQLite มาถูกเข้าเพื่อแสดงผลผ่าน ListView นั้นไม่ยากเลย ทีนี้เราจะมาทำการเขียนฟังก์ชันของแอพพลิเคชันของเราให้สามารถเพิ่มข้อมูลเข้าไปเก็บไว้ใน SQLite ครับ

ถ้าเป็นคำสั่ง SQL สำหรับ Insert ข้อมูลนั้นก็น่าจะอยู่ในรูปแบบ

INSERT INTO table(field1,field2)VALUES('data1','data2');

สำหรับ Android นั้นต้องเขียน boolean มาช่วยครับ

เริ่มต้นพัฒนา

ให้ทำการ Add New “Blank Activity” เข้าไปใหม่ใน Android Studio ของเราก่อนครับ

Add New "Blank Activity" เข้าไป
Add New “Blank Activity” เข้าไป
ตั้งชื่อ MainActivity2
ตั้งชื่อ MainActivity2

หลังจากนั้นให้ออกแบบในส่วนของ activity_main.xml และ activity_main2.xml เพิ่มลงไปครับ

ส่วนของ activity_main.xml นั้นให้เพิ่มปุ่มเข้าไปเป็นปุ่มสำหรับใช้ Intent เปลี่ยนหน้า (ศึกษาย้อนหลังที่:เขียนแอพพลิเคชัน Android การใช้งาน Intent Activity ) ให้ออกแบบดังนี้

android-sqlite-add-3

 

ส่วนของ 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=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Movies List"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_below="@+id/textView"
        android:layout_alignParentStart="true"
        android:layout_above="@+id/Addbtn" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add New Movie"
        android:id="@+id/Addbtn"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:width="300dp" />
</RelativeLayout>

หลังจากนั้นให้เราเขียนคำสั่ง Intent เพิ่มเข้าไปในไฟล์ MainActivity.java ครับ ส่วน Header ประกอบไปด้วย

import android.app.Activity;
import android.content.Intent;

ส่วนของ ปุ่ม และการเปลี่ยนหน้า

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

ทีนี้ไปออกแบบ Layout ของ activity_main2.xml ดังนี้

ออกแบบหน้าจอ activity_main2.xml
ออกแบบหน้าจอ activity_main2.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.MainActivity2">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Movie Title"
        android:id="@+id/textview2"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_below="@+id/textview2"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="37dp"
        android:width="300dp"
        android:hint="Insert Movie Title" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Detail"
        android:id="@+id/textView3"
        android:layout_below="@+id/editText"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:ems="10"
        android:id="@+id/editTextDetail"
        android:layout_below="@+id/textView3"
        android:layout_alignStart="@+id/editText"
        android:layout_marginTop="31dp"
        android:width="300dp"
        android:maxLines="3"
        android:hint="Insert Detail" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Submit"
        android:id="@+id/submitBtn"
        android:layout_below="@+id/editTextDetail"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="42dp"
        android:width="300dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cancel"
        android:id="@+id/backBtn"
        android:layout_below="@+id/submitBtn"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="34dp"
        android:width="300dp" />
</RelativeLayout>

เปิดไฟล์ MainActivity2.java ขึ้นมาเขียน code กันหน่อยดีกว่า ประกาศ Header ไว้เลยครับตามนี้

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.EditText;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.widget.Toast;

ต่อมาก็ Final ตัว widget ทั้งหมดให้เสร็จสรรพ

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

        this.setTitle("Add new data");
        Button backBtn = (Button)findViewById(R.id.backBtn);
        backBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent showPage = new Intent(MainActivity2.this,MainActivity.class);
                startActivity(showPage);
            }
        });

        Button addData = (Button)findViewById(R.id.submitBtn);
        addData.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(AddNew()) {
                    Intent showPage = new Intent(MainActivity2.this,MainActivity.class);
                    startActivity(showPage);
                }
            }
        });
    }

เรียก Library ของ Database.java ตัว SQLite มาประกาศไว้ก่อนครับ

public class MainActivity2 extends ActionBarActivity {

    SQLiteDatabase sqliteMyDB;
    MyDbHelper myDataHelper;

เพิ่ม Public Boolean ใหม่ขึ้นมาชื่อว่า AddNew() เพื่อให้คำสั่ง ของปุ่ม addData ทำงานได้สมบูรณ์ พร้อมแทรกคำสั่งเพื่อทดสอบว่า ห้ามเป็นค่าว่างดังนี้

final EditText editTextTitle = (EditText) findViewById(R.id.editText);
        final EditText editTextDetail = (EditText) findViewById(R.id.editTextDetail);

        final AlertDialog.Builder alertBox = new AlertDialog.Builder(this);
        AlertDialog alertMsg = alertBox.create();

        //Check Filter
        if(editTextTitle.getText().length() == 0){
            alertMsg.setMessage("Please insert Movie's Title");
            alertMsg.show();
            editTextTitle.requestFocus();
            return false;
        }
        if(editTextDetail.getText().length() == 0){
            alertMsg.setMessage("Please insert Movie's Detail");
            alertMsg.show();
            editTextDetail.requestFocus();
            return false;
        }

เป็นการเช็คว่าถ้า editTextTitle เป็นค่าว่างแล้ว จะมี Message Alert แจ้งขึ้นมาว่า ห้ามปล่อยว่าง

ตัวอย่าง
ตัวอย่าง

ต่อมาให้เราเขียนคำสั่งสำหรับ Insert Data เข้าไปโดยอ้างอิงข้อมูลที่เรากรอกผ่าน editTextTitle และ editTextDetail ครับ

myDataHelper = new MyDbHelper(this);

        sqliteMyDB = myDataHelper.getWritableDatabase();

        ContentValues Val = new ContentValues();
        Val.put("title", editTextTitle.getText().toString());
        Val.put("description", editTextDetail.getText().toString());

        long rows = sqliteMyDB.insert(myDataHelper.TABLE_NAME, null, Val);

        sqliteMyDB.close();
        Toast.makeText(MainActivity2.this,"Success!",Toast.LENGTH_SHORT).show();

        return false;

ภาพรวมของ Code ไฟล์ MainActivity2.java จะเป็นดังนี้

package daydev.com.sqlitetut;

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.EditText;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.widget.Toast;

public class MainActivity2 extends ActionBarActivity {

    SQLiteDatabase sqliteMyDB;
    MyDbHelper myDataHelper;

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

        this.setTitle("Add new data");
        Button backBtn = (Button)findViewById(R.id.backBtn);
        backBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent showPage = new Intent(MainActivity2.this,MainActivity.class);
                startActivity(showPage);
            }
        });

        Button addData = (Button)findViewById(R.id.submitBtn);
        addData.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(AddNew()) {
                    Intent showPage = new Intent(MainActivity2.this,MainActivity.class);
                    startActivity(showPage);
                }
            }
        });
    }

    public boolean AddNew(){

        final EditText editTextTitle = (EditText) findViewById(R.id.editText);
        final EditText editTextDetail = (EditText) findViewById(R.id.editTextDetail);

        final AlertDialog.Builder alertBox = new AlertDialog.Builder(this);
        AlertDialog alertMsg = alertBox.create();

        //Check Filter
        if(editTextTitle.getText().length() == 0){
            alertMsg.setMessage("Please insert Movie's Title");
            alertMsg.show();
            editTextTitle.requestFocus();
            return false;
        }
        if(editTextDetail.getText().length() == 0){
            alertMsg.setMessage("Please insert Movie's Detail");
            alertMsg.show();
            editTextDetail.requestFocus();
            return false;
        }

        myDataHelper = new MyDbHelper(this);

        sqliteMyDB = myDataHelper.getWritableDatabase();

        ContentValues Val = new ContentValues();
        Val.put("title", editTextTitle.getText().toString());
        Val.put("description", editTextDetail.getText().toString());

        long rows = sqliteMyDB.insert(myDataHelper.TABLE_NAME, null, Val);

        sqliteMyDB.close();
        Toast.makeText(MainActivity2.this,"Success!",Toast.LENGTH_SHORT).show();

        return false;
    }



    @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_activity2, 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);
    }
}

ทำการทดสอบแอพพลิเคชันของเราหน่อยดีกว่า

android-sqlite-add-5

ใส่ข้อมูลเข้าไปเล็กน้อยแล้วกด “Submit”

มีหน้าต่าง Toast ว่า "success!"
มีหน้าต่าง Toast ว่า “success!”

กลับไปดูหน้า ListView ก็จะเห็นว่า มีข้อมูลใหม่มาแล้ว!!!!

android-sqlite-add-7

ศึกษาบทเรียนย้อนหลังทุกเรื่องได้ที่ 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 ของเรานะครับ, ถือว่าช่วยเหลือกัน