Android Add Insert Data to SQLite Database (Android SQLite) |
Android Add Insert Data to SQLite Database (Android SQLite) การเขียน Android เพื่อติดต่อกับฐานข้อมูลของ SQLite Database ในการ Insert ข้อมูลลงใน Table ของ SQLite โดยใช้ class ของ SQLiteOpenHelper และ SQLiteDatabase ในการเพิ่มข้อมูลจะใช้การออกแบบ Form ซึงเป็นตัวรับค่า Input จาก Users จากนั้นจะนำค่าที่ได้จากการ Input บันทึกลงในฐานข้อมูลอีกที
พื้นฐานของ SQLite Database กับ Android สามารถศึกษาได้จากบทความนี้
Flow การทำงาน
ใน Main Activity จะสร้างปุ่ม Button สำหรับคลิกไปยัง Activity ที่เป็น Input Form โดยใช้การวิธี Intent Activity ในการแสดงและโชว์ควบคุมการทำงานของ Activity ต่าง ๆ
โครงสร้างของ Table
ชื่อว่าตาราง members ประกอบด้วยฟิวด์ MemberID, Name , Tel
โครงสร้างของ File
โครงสร้างของไฟล์ประกอบด้วย
- myDBClass.java (เป็น class สำหรับติดต่อกับฐานข้อมูล และบันทึกข้อมูล)
- MainActivity.java และ activity_main.xml (ไฟล์ activity หลักสำหรับสร้าง Button คลิกไปยัง Activity Input Form)
- AddActivity.java และ activity_add.xml (ไฟล์ activity ที่เป็น Input Form และบันทึกข้อมูล)
รายละเอียดของไฟล์
myDBClass.java
package com.myapp;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class myDBClass extends SQLiteOpenHelper {
// Database Version
private static final int DATABASE_VERSION = 1;
// Database Name
private static final String DATABASE_NAME = "mydatabase";
// Table Name
private static final String TABLE_MEMBER = "members";
public myDBClass(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
// Create Table Name
db.execSQL("CREATE TABLE " + TABLE_MEMBER +
"(MemberID INTEGER PRIMARY KEY AUTOINCREMENT," +
" Name TEXT(100)," +
" Tel TEXT(100));");
Log.d("CREATE TABLE","Create Table Successfully.");
}
// Insert Data
public long InsertData(String strMemberID, String strName, String strTel) {
// TODO Auto-generated method stub
try {
SQLiteDatabase db;
db = this.getWritableDatabase(); // Write Data
/**
* for API 11 and above
SQLiteStatement insertCmd;
String strSQL = "INSERT INTO " + TABLE_MEMBER
+ "(MemberID,Name,Tel) VALUES (?,?,?)";
insertCmd = db.compileStatement(strSQL);
insertCmd.bindString(1, strMemberID);
insertCmd.bindString(2, strName);
insertCmd.bindString(3, strTel);
return insertCmd.executeInsert();
*/
ContentValues Val = new ContentValues();
Val.put("MemberID", strMemberID);
Val.put("Name", strName);
Val.put("Tel", strTel);
long rows = db.insert(TABLE_MEMBER, null, Val);
db.close();
return rows; // return rows inserted.
} catch (Exception e) {
return -1;
}
}
// Select Data
public String[] SelectData(String strMemberID) {
// TODO Auto-generated method stub
try {
String arrData[] = null;
SQLiteDatabase db;
db = this.getReadableDatabase(); // Read Data
Cursor cursor = db.query(TABLE_MEMBER, new String[] { "*" },
"MemberID=?",
new String[] { String.valueOf(strMemberID) }, null, null, null, null);
if(cursor != null)
{
if (cursor.moveToFirst()) {
arrData = new String[cursor.getColumnCount()];
/***
* 0 = MemberID
* 1 = Name
* 2 = Tel
*/
arrData[0] = cursor.getString(0);
arrData[1] = cursor.getString(1);
arrData[2] = cursor.getString(2);
}
}
cursor.close();
db.close();
return arrData;
} catch (Exception e) {
return null;
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_MEMBER);
// Re Create on method onCreate
onCreate(db);
}
}
ในไฟล์ของ class myDBClass จะมี method หลัก ๆ อยู่ 2 ตัวคือ InsertData() และ SelectData() โดย
- InsertData() ใช้สำหรับการ Insert ข้อมูล
- SelectData() ใช้สำหรับการตรวจสอบข้อมูลว่ามีอยู่แล้วหรือยัง
MainActivity.java และ activity_main.xml
activity_main.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" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="35dp"
android:text="Main Menu"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="35dp"
android:text="Add" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button1"
android:layout_centerInParent="true"
android:layout_marginTop="35dp"
android:text="Show" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button2"
android:layout_centerInParent="true"
android:layout_marginTop="35dp"
android:text="Update" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/button3"
android:layout_centerInParent="true"
android:layout_marginTop="35dp"
android:text="Delete" />
</RelativeLayout>
XML Layout ของ Activity หลัก
MainActivity.java
package com.myapp;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Button1 (Add)
final Button btn1 = (Button) findViewById(R.id.button1);
// Perform action on click
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Open Form Add
Intent newActivity = new Intent(MainActivity.this,AddActivity.class);
startActivity(newActivity);
}
});
}
}
AddActivity.java และ activity_add.xml
activity_add.xml
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tableLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="Add New Member : "
android:layout_span="3"
android:textAppearance="?android:attr/textAppearanceLarge" />
</TableRow>
<View
android:layout_height="1dip"
android:background="#CCCCCC" />
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<TextView
android:id="@+id/textView2"
android:text="MemberID"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/txtMemberID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10" >
<requestFocus />
</EditText>
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<TextView
android:id="@+id/textView3"
android:text="Name"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/txtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" >
</EditText>
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<TextView
android:id="@+id/textView4"
android:text="Tel"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/txtTel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10" >
</EditText>
</TableRow>
<LinearLayout
android:id="@+id/LinearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dip" >
<Button
android:id="@+id/btnSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save" />
<Button
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel" />
</LinearLayout>
</TableLayout>
เป็น Layout ของ Activity ที่เป็น Input Form
AddActivity.java
package com.myapp;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class AddActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
// btnSave (Save)
final Button save = (Button) findViewById(R.id.btnSave);
save.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// If Save Complete
if(SaveData())
{
// Open Form Main
Intent newActivity = new Intent(AddActivity.this,MainActivity.class);
startActivity(newActivity);
}
}
});
// btnCancel (Cancel)
final Button cancel = (Button) findViewById(R.id.btnCancel);
cancel.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Open Form Main
Intent newActivity = new Intent(AddActivity.this,MainActivity.class);
startActivity(newActivity);
}
});
}
public boolean SaveData()
{
// txtMemberID, txtName, txtTel
final EditText tMemberID = (EditText) findViewById(R.id.txtMemberID);
final EditText tName = (EditText) findViewById(R.id.txtName);
final EditText tTel = (EditText) findViewById(R.id.txtTel);
// Dialog
final AlertDialog.Builder adb = new AlertDialog.Builder(this);
AlertDialog ad = adb.create();
// Check MemberID
if(tMemberID.getText().length() == 0)
{
ad.setMessage("Please input [MemberID] ");
ad.show();
tMemberID.requestFocus();
return false;
}
// Check Name
if(tName.getText().length() == 0)
{
ad.setMessage("Please input [Name] ");
ad.show();
tName.requestFocus();
return false;
}
// Check Tel
if(tTel.getText().length() == 0)
{
ad.setMessage("Please input [Tel] ");
ad.show();
tTel.requestFocus();
return false;
}
// new Class DB
final myDBClass myDb = new myDBClass(this);
// Check Data (MemberID exists)
String arrData[] = myDb.SelectData(tMemberID.getText().toString());
if(arrData != null)
{
ad.setMessage("MemberID already exists! ");
ad.show();
tMemberID.requestFocus();
return false;
}
// Save Data
long saveStatus = myDb.InsertData(tMemberID.getText().toString(),
tName.getText().toString(),
tTel.getText().toString());
if(saveStatus <= 0)
{
ad.setMessage("Error!! ");
ad.show();
return false;
}
Toast.makeText(AddActivity.this,"Add Data Successfully. ",
Toast.LENGTH_SHORT).show();
return true;
}
}
คำสั่ง Java ที่ใช้ในการ Insert ข้อมูลลงใน SQLite Database โดยมีการตรวจสอบค่าว่าง และตรวจสอบข้อมูลซ้ำ ก่อนจะทำการบันทึกข้อมูล
AndroidManifest.xml
<activity
android:name="AddActivity"
android:theme="@style/AppTheme"
android:screenOrientation="portrait"
android:label="@string/title_activity_main" />
เพิ่ม AddActivity ลงในไฟล์ AndroidManifest.xml
Screenshot
คลิกที่ Add เพื่อไปยัง Activity ที่เป็น Input Form
Form Activity ที่เป็น Input Form
กรณีที่ไม่ได้กรอกข้อมูลก็จะมีการแจ้งให้ทราบ
ทดสอบการ Input ข้อมูล
คลิกที่ Save กรณีที่ Insert ผ่านก็จะแจ้งว่า Add Data Successfully.
และทำการ Intent กลับมายัง Main Activity อัตโนมัติ
เมื่อ Export ข้อมูลจาก Emulator ก็จะพบกับข้อมูลดังรูป
ลองเพิ่มข้อมูลหลาย ๆ รายการดังรูป
Property & Method (Others Related) |
|
ช่วยกันสนับสนุนรักษาเว็บไซต์ความรู้แห่งนี้ไว้ด้วยการสนับสนุน Source Code 2.0 ของทีมงานไทยครีเอท
|
|
|
By : |
ThaiCreate.Com Team (บทความเป็นลิขสิทธิ์ของเว็บไทยครีเอทห้ามนำเผยแพร่ ณ เว็บไซต์อื่น ๆ) |
|
Score Rating : |
|
|
|
Create/Update Date : |
2012-07-17 17:36:41 /
2012-07-21 13:55:39 |
|
Download : |
No files |
|
Sponsored Links / Related |
|
|
|
|
|
|
|