.:: CODE SNIPPET ::.

"Your time is limited, so don't waste it living someone else's life"

Thao tác cơ sở dữ liệu SQLite trên android


Dữ liệu của hệ điều hành android được lưu trữ cục bộ trên SQLite. Đây là một cơ sở dữ liệu tương tự như MS SQL của Microsoft. Tuy nhiên, Android cung cấp ContentProvider giúp ta lấy được dữ liệu thông qua một đường dẫn gọi là Uri. Ở đây thì chúng ta chưa cần nói gì đến URI cả.

Cách để chúng ta kết nối và khai thác dữ liệu trong SQLite.
Đầu tiên chúng ta sẽ tạo ra lớp DBAdapter. Lớp này cung cấp những hàm thao tác với SQLite (insert,update,delete).

package com.windrealm.android;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;

public class DBAdapter {

public static final String TAG ="DBAdapter";

public static final String KEY_NAME = "name";
public static final String KEY_PHONE = "phone";
public static final String KEY_EMAIL = "email";

private DatabaseHelper mDbHelper;
private SQLiteDatabase mDB;

private static final String DATABASE_NAME = "Database_Employee";
private static final String DATABASE_TABLE = "user";
private static final int DATABASE_VERSION = 2;
private static final String DATABASE_CREATE = "" +
"CREATE TABLE "+DATABASE_TABLE+" (name TEXT PRIMARY KEY NOT NULL , phone VARCHAR, email VARCHAR)";

private final Context mContext;

private static class DatabaseHelper extends SQLiteOpenHelper{

public DatabaseHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(DATABASE_CREATE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
Log.i(TAG, "Upgrading DB");
db.execSQL("DROP TABLE IF EXISTS "+DATABASE_TABLE);
onCreate(db);
}
}

public DBAdapter(Context ctx){
this.mContext = ctx;
}

public DBAdapter open()
{
mDbHelper = new DatabaseHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION);
mDB = mDbHelper.getWritableDatabase();

return this;
}

public void close(){
mDbHelper.close();
}

public long createUser(String name,String phone){
ContentValues inititalValues = new ContentValues();
inititalValues.put(KEY_NAME, name);
inititalValues.put(KEY_PHONE, phone);
return mDB.insert(DATABASE_TABLE, null, inititalValues);
}

public long createUser(String name,String phone, String email){
ContentValues inititalValues = new ContentValues();
inititalValues.put(KEY_NAME, name);
inititalValues.put(KEY_PHONE, phone);
inititalValues.put(KEY_EMAIL, email);
return mDB.insert(DATABASE_TABLE, null, inititalValues);
}

public boolean deleteUser(String rowName)
{
String sql="delete from "+DATABASE_TABLE+" where name='"+rowName+"'";
return mDB.delete(DATABASE_TABLE, KEY_NAME + "='" + rowName+"'", null) >0;
}

public Cursor getAllUsers(){
return mDB.query(DATABASE_TABLE, new String[] {KEY_NAME}, null, null, null, null, null);
}

public Cursor getAllUsers1(){
return mDB.query(DATABASE_TABLE, null, null, null, null, null, null);
}

public Cursor getOneUser(String pname){
return mDB.query(DATABASE_TABLE, new String[]{KEY_NAME,KEY_PHONE,KEY_EMAIL}, KEY_NAME+"='"+pname+"'", null, null, null, null);
}

/*public int updateUser(String newName, String[] whereName){
ContentValues cnt=new ContentValues();
cnt.put(KEY_NAME, newName);
return mDB.update(DATABASE_TABLE, cnt, KEY_NAME+"=?",whereName);
}*/

public int updateUser(String newName,String phone, String email, String pNameKey){
ContentValues cnt=new ContentValues();
cnt.put(KEY_NAME, newName);
cnt.put(KEY_PHONE, phone);
cnt.put(KEY_EMAIL, email);
return mDB.update(DATABASE_TABLE, cnt, KEY_NAME+"='"+pNameKey+"'",null);
}
}

Bên trong class DBAdapter thấy rằng còn có lớp DatabaseHelper kế thừa từ SQLiteOpenHelper. Lớp này cung cấp các hàm để tạo database, tạo table và các reference.
Trong lớp này, chúng ta chạy lại hàm super(context, name, factory, version); để tạo database với tên được khởi tạo trước đó.
Hàm onCreate để khởi tạo và tạo ra table với tên “user”.
đó là hai hàm mà mình cần nắm trong lớp này và đấy cũng là nhiệm vụ chính của lớp này.

Tiếp đến lớp DBAdapter bên ngoài, chúng ta cần quan tâm đến các hàm truy vấn cơ sở dữ liệu của SQLite mà android đã cung cấp sẵn.

– Hàm createUser(String name,String phone, String email): Hàm này để tạo ra một dòng mới trong bảng user với 3 trường như đã thấy. trong hàm này đã dùng đến hàm
public long insert (String table, String nullColumnHack, ContentValues values)
table: là bảng nào trong database mà chúng ta muốn thêm dòng vào.
nullColumnHack: giá trị này nhằm để set giá trị NULL cho các trường nullable của table. Nếu giá trị này dược đặt là null thì khi gặp các trường nullable, nếu giá trị của trường đó là rỗng (chưa được set trong biến values) thì SQLite tự động đặt giá trị là NULL vô trường đó.
values: biến này chứa tên trường và giá trị của trường được gán trước.

Advertisements

One response to “Thao tác cơ sở dữ liệu SQLite trên android

  1. ukyokg February 24, 2013 at 11:11 PM

    bạn có thể chỉ mình cú pháp tạo nhiều bảng trong SQLite được không?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: