SQLite Database in android and Tool Manager SQLite Database


Hôm nay mình sẻ giới thiệu cho các bạn cách làm thế nào để create một sqlite database và thao tác trên nó. Và mình củng sẻ giới thiệu thêm các thao tác import/export sqlite database khi sử dụng code hay sử dụng tool .

Source code : Download

 

VD: chúng ta có 1 database có 1 table có tên là contacts sau đây :

d1

Với _id là khóa chính và 2 field name và email Sau đây là class DBAdapter.java


package com.thaihoanghai.database;

import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBAdapter {
	// Defined several constants to contain the various
	// fields for the table we will create in database
	public static final String KEY_ROWID = "_id";
	public static final String KEY_NAME = "name";
	public static final String KEY_EMAIL = "email";
	private static final String TAG = "DBAdapter";

	private static final String DATABASE_NAME = "MyDB";
	private static final String DATABASE_TABLE = "contacts";
	private static final int DATABASE_VERSION = 2;

	private static final String DATABASE_CREATE =
			"create table contacts ("+
					"_id integer primary key autoincrement, "+
					"name text not null, "+
					"email text not null);";

	private final Context context;
	private DatabaseHelper DBHelper;
	private SQLiteDatabase db;

	public DBAdapter(Context ctx) {
		this.context = ctx;
		DBHelper = new DatabaseHelper(context);
	}

	// opens the database
	public DBAdapter open() throws SQLException{
		db = DBHelper.getWritableDatabase();
		return this;
	}

	// closes the database
	public void close(){
		DBHelper.close();
	}

	// insert a contact into the database
	public long insertContact(String name, String email){
		ContentValues initialValues = new ContentValues();
		initialValues.put(KEY_NAME, name);
		initialValues.put(KEY_EMAIL, email);
		return db.insert(DATABASE_TABLE, null, initialValues);
	}

	// deletes a particular contact
	public boolean deleteContact(long rowId){
		return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
	}

	// retrieves all the contacts
	public Cursor getAllContacts(){
		return db.query(DATABASE_TABLE, new String[]{KEY_ROWID,KEY_NAME,KEY_EMAIL},
				null, null, null, null, null, null);
	}

	@SuppressLint("NewApi")
	public Cursor getContact(long rowId){
		Cursor mCursor = db.query(true, DATABASE_TABLE, new String[]{KEY_ROWID,KEY_NAME,KEY_EMAIL},
				KEY_ROWID+"="+rowId, null, null, null, null, null, null);
		if(mCursor != null){
			mCursor.moveToFirst();
		}
		return mCursor;

	}

	//---Update a contact
	public boolean updateContact(long rowId, String name, String email){
		ContentValues args = new ContentValues();
		args.put(KEY_NAME, name);
		args.put(KEY_EMAIL, email);
		return db.update(DATABASE_TABLE, args, KEY_ROWID+"="+rowId, null)>0;
	}

	private static class DatabaseHelper extends SQLiteOpenHelper{

		public DatabaseHelper(Context context) {
			super(context, DATABASE_NAME, null, DATABASE_VERSION);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			try {
				db.execSQL(DATABASE_CREATE);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
					+newVersion + ", which will destroy all old data");
			db.execSQL("Drop table if exists contacts");
			onCreate(db);
		}

	}

}

Xong chúng ta đả có 1 lớp kết nối cùng với các method insert, update, delete. Sau đây là code để thao tác với Class DBAdapter.java

// initialize database
		DBAdapter db = new DBAdapter(this);
		// --- add a contact ---
		db.open();
		long id = db.insertContact("Kobee", "thaihoanhai.it@gmail.com");
		id = db.insertContact("Jenny", "sweetlove@yahoo.com");
		db.close();

		// get all contacts
		db.open();
		Cursor c = db.getAllContacts();
		if(c.moveToFirst()){
			do{
				Toast.makeText(this, c.getString(0) + " - " + c.getString(1), Toast.LENGTH_LONG).show();
			}while(c.moveToNext());
		}
		db.close();

		// get contact with id
		db.open();
		long yourId = 1;
		Cursor c1 = db.getContact(yourId);
		if(c1.moveToFirst()){
			Toast.makeText(this, c1.getString(0) + " - " + c1.getString(1), Toast.LENGTH_LONG).show();
		}else{
			Toast.makeText(this, "Not found contact with ID = " + yourId, Toast.LENGTH_LONG).show();
		}
		db.close();

		// Update contact
		db.open();
		if(db.updateContact(1, "Super Kobee", "supper_man@gmail.com"))
			Toast.makeText(this, "Update successful", Toast.LENGTH_LONG).show();
		else
			Toast.makeText(this, "Update failed", Toast.LENGTH_LONG).show();
		db.close();

		// delete a contact
		db.open();
		if(db.deleteContact(1))
			Toast.makeText(this, "Delete successful.", Toast.LENGTH_LONG).show();
		else
			Toast.makeText(this, "Delete failed.", Toast.LENGTH_LONG).show();
		db.close();

Ok giờ bạn có thể thực hiện và test các chức năng đó.

Trong quá trình làm các bạn có thể xem database của chúng ta bằng cách như sau :

d1

Các bạn vào thư mục data->data->your package->databases các bạn sẻ thấy database của mình: d1

Vậy làm sao có thể xem được MyDB của chúng ta như khi chúng ta sử dụng các cơ sở dữ liệu như MSSQL hay MySQl . SQLite Database được các tool hổ trợ để làm các điều như vậy sau đây mình sẻ giới thiệu các bạn các tool có thể. Còn việc các bạn có thể nên tìm hiểu thêm về các tool này

Các tool mình giới thiệu bao gồm :

SQLite Manager : Download

SQLiteSpy : Download

SQLiteStudio : Download

SQLite Administrator : Download

SQLite Database Browser : Download

… Kình thưa các loại khác nửa.

Ở đây mình sử dụng SQLite Database Browser để xem database của chúng ta. Có lẻ anh này là basic nhứt rồi =]] =]]…

Khi các bạn down về và run sẻ có màn hình sau hiển thị.

d1

Ok giờ chúng ta hạ xuống và export database của chúng ta from simulator ra ngoài desktop  nào.

Tại thư mục database chúng ta chọn MyDB để export ra  data->data->databases->MyDB chúng ta nhấn vào button pull a file…Như hình vẻ

d1

Sau khi file MyDB được export ra thư mục của các bạn. thì các bạn qua lại với SQLite Database Browser các bạn chọn

File ->Open Database (Ctrl + O). Chọn MyDB chúng ta vừa export ra desktop Chúng ta sẻ thấy được thông tin của Database của chúng ta

d1

d1

Chúng ta có thể thực hiện 1 số câu lệnh truy vấn tại TAP Execute SQL.

d1

Ok sau khi thao tác mệt mỏi các vấn đề như thêm , xóa , sửa  gì đó trong file này.

Cách 1 : Đơn giản nhứt để import MyDB này vào lại chương trình của chúng ta là :

Step 1 : Quay vào lại DDMS và xóa đi MyDB trong đó (có thể không củng được ) và nhận button push a file

d1

và chép nó vào trong thư mục database và run bình thường.

Cách 2 : chúng ta copy file MyDB vào trong thư mục assert .

d1

Để chép file MyDB này vào thư mục databases in DDMS của chúng ta chúng ta cần chạy đoạn lệnh sau trước khi thao tác với Database:

               try {
			String destPath = "/data/data/" + getPackageName() + "/databases/MyDB";
			File f = new File(destPath);
			if(!f.exists()){
				InputStream inputStream = getBaseContext().getAssets().open("MyDB");
				OutputStream outputStream =	new FileOutputStream(destPath);
				// --- copy 1K bytes at a time ---
				byte[] buffer = new byte[1024];
				int length;
				while((length = inputStream.read(buffer)) > 0){
					outputStream.write(buffer, 0, length);
				}
				inputStream.close();
				outputStream.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		// initialize database
		DBAdapter db = new DBAdapter(this);

Ok chúc các bạn thành công .

7 Responses to “SQLite Database in android and Tool Manager SQLite Database”

  1. Content Provider + SQLite Database in Android | Thái Hoàng Hải - Nothing Is Impossible !!! Says:

    […] SQLite Database in android and Tool Manager SQLite Database […]

  2. Tam Nguyen Says:

    Cho tôi hỏi là ,sau khi copy file MyDB vào trong thư mục assert, sử dụng thêm, sử xóa… mình có thể lưu ngược trở lại được không .

  3. Nguyễn Văn Thanh Says:

    ban ơi khi mình cho vào máy ảo chạy thì mình đã cho hết dữ liệu vào rồi. Nhưng khi mình cho vào máy thật chạy thì nó lại ko có dữ liệu là sao vậy. giúp minh với

  4. Đời Cơbảnlà Buồn Says:

    Bạn cho mình ? cái này vs. Mình dùng sqlite admin để tạo csdl nhưng không gõ tiếng việt được. Giúp mình vs. TKs

    • kobee Says:

      1) Left click the “C:\” icon in the command prompt window’s top left corner.
      2) Click on “Properties” from the menu.
      3) Select the “Font” tab in the Properties window.
      4) Select a font that support unicode from the list such as “Consolas” or “Lucida Console”.
      5) Click the OK button.

      Try again


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: