Sqlite trong android (part 1)

 Download demo

SQLite là một loại cơ sở dữ liệu trên mobile. Có nhiều cách để lưu trữ dữ liệu trong android như ghi dữ liệu dưới dạng text file, xml hay SharePreference và SQLite. Do SQLite là file được lưu với cấu trúc “data base” nên việc truy xuất và lưu dữ dữ liệu (thêm, sửa, xóa, lấy dữ liệu) khá dễ dàng. Nếu các bạn đã quen làm việc trên các hệ quản trị CSDL khác như: MySQL, SQL server… thì có thể dễ dàng hiểu được cách thức làm việc trên SQLite

Để làm việc với SQLite các bạn cần làm theo cài đặt theo các bước sau:

. Vào thư mục tools trong thư mục sdk trên máy của bạn. Trên máy mình có link như trên hình

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

. Tạo biến môi trường: tương tự như tạo biến môi trường khi cài jdk

Chuột phải My computer -> properties -> Advanced system settings ->Environtnent Variables -> chọn value name PATH -> edit

Variable name: PATH

Variable valute: các bạn add thêm vào sao các link có sẵn “F:\android\adt-bundle-windows-x86_64-20131030\sdk\tools”  (đường dẫn đến thư mục tools trong foder sdk trong máy của bạn)

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tipsAndroid tutorials, SQLite, Sqlite for Android, ANDROID, android tips

 

Note: các bn dùng du ; đ ngăn cách các phn trong variable value

. Để kiểm tra các bạn có thể bật cmd gõ lệnh sqlite3 thấy kết quả như trên hình là được

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

Tương tự với các hệ quản trị CSDL khác SQLite cũng có 1 tools hỗ trợ cho việc quản lý đó là SQLiteAdmin

Các bạn có thể download SQLiteAdmin theo link

http://sqliteadmin.orbmu2k.de/

Hoặc download luôn bộ cài của mình ở link dưới

sqliteadmin

Sau khi download về và giải nén các bạn chạy file sqliteadmin.exe thấy xuất hiện giao diện

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

Cũng giống như các tools quản trị CSDL khác tools này giúp bạn làm việc với CSDL bạn tạo( Mình hay dùng tools này để kiểm tra các câu truy vấn xem có đúng không mình sẽ hướng dẫn cách mình hay làm ở dưới)

Để các bạn hiểu rõ về SQLite trong bài này mình sẽ làm 1 ví dụ đơn giản về việc tạo một bảng dữ liệu SinhVien với 3 cột là _id, Name và Address sau đó mình sẽ viết các hàm để thực hiện INSERT, UPDATE , DELETE, SELECT với bảng đấy. Trong bài tiếp theo mình sẽ hướng dẫn các bạn làm ví dụ với nhiều bảng trong SQLite.

Để làm ví dụ này các bạn các bạn cần thực hiện theo lần lượt các bước sau:

Bước 1: mở file activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"</pre>

xmlns:tools="http://schemas.android.com/tools"

 android:layout_width="match_parent"

 android:layout_height="match_parent"

 tools:context=".MainActivity" >



<ListView

 android:id="@android:id/list"

 android:layout_width="wrap_content"

 android:layout_height="wrap_content" />



</RelativeLayout>

Bước 2: tạo file layout_tiem.xml (mình muốn hiển thị dữ liệu select lên được ra listview với mỗi item có giao diện như  file này)

<?xml version="1.0" encoding="utf-8"?></pre>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 android:layout_width="match_parent"

 android:layout_height="match_parent"

 android:orientation="horizontal"

 android:paddingBottom="5dp"

 android:paddingLeft="5dp"

 android:paddingRight="5dp"

 android:paddingTop="5dp" >



<TextView

 android:id="@+id/tvName"

 android:layout_width="0dp"

 android:layout_height="wrap_content"

 android:layout_weight="1" />



<TextView

 android:id="@+id/tvAddress"

 android:layout_width="0dp"

 android:layout_height="wrap_content"

 android:layout_weight="1" />



</LinearLayout>

Bước 3: mình tạo class Student.java trong packet com.example.sqlitedemo2

package com.example.sqlitedemo2;</pre>

public class Student {



public String Name;



public String Address;



public Student() {

 super();

 }



public Student(String name, String address) {

 super();

 Name = name;

 Address = address;

 }



public String getName() {

 return Name;

 }



public void setName(String name) {

 Name = name;

 }



public String getAddress() {

 return Address;

 }



public void setAddress(String address) {

 Address = address;

 }



}

Bước 4: tạo file MySQLiteOpenHelper.java – class này quản lý việc chúng ta truy xuất xuống CSDL

package com.example.sqlitedemo2;</pre>

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 MySQLiteOpenHelper extends SQLiteOpenHelper {



private static final String DB_NAME = "MyDataBase.db";



private static final int vs = 1;

 private SQLiteDatabase database;



// init table



// init table SinhVien

 public static final String TB_NAME = "SinhVien";



// init ten cac cot trong table

 public static final String CL_id = "_id";

 public static final String CL_Name = "Name";

 public static final String CL_Address = "Address";



// ....



public MySQLiteOpenHelper(Context context) {



super(context, DB_NAME, null, vs);

 database = this.getWritableDatabase();

 }



@Override

 public void onCreate(SQLiteDatabase db) {

 // TODO Auto-generated method stub



String sqlCreatSinhVien = "CREATE TABLE " + TB_NAME + "(" + CL_id

 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + CL_Name + " TEXT, "

 + CL_Address + " TEXT)";

 // cac ban nen log cac cau sql ra va chay thu tren sqliteadmin de phat hien ra loi

 Log.d("debug", sqlCreatSinhVien);

 db.execSQL(sqlCreatSinhVien);



 // neu csdl cp nhieu bang thi cac bang khac o day



// ...



}



@Override

 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

 // TODO Auto-generated method stub

 db.execSQL("DROP TABLE IF EXISTS " + TB_NAME);

 onCreate(db);



}



// cac phuong thuc de lam viec voi bang TB_NAME



 // insert vao bang TB_NAME = "SinhVien"

 public void INSERT_SinhVien(Student mStudent) {

 ContentValues values = new ContentValues();

 values.put(CL_Name, mStudent.getName());

 values.put(CL_Address, mStudent.getAddress());

 database.insertOrThrow(TB_NAME, null, values);

 }



 // delete 1 dong trong bang TB_NAME = "SinhVien" voi gia tri cot id = id

 public void DELETE_SinhVien(int id) {

 database.delete(TB_NAME, CL_id + " = " + id, null);

 }



// update 1 dong trong bang TB_NAME = "SinhVien" voi gia tri cot id = id

 public void UPDATE_SinhVien(Student mStudent, int id) {

 ContentValues values = new ContentValues();

 values.put(CL_Name, mStudent.getName());

 values.put(CL_Address, mStudent.getAddress());

 database.update(TB_NAME, values, "_id = " + id, null);

 }



// select toan bo bang TB_NAME = "SinhVien"

 public Cursor SELECT_ALL__SinhVien() {

 return database.query(TB_NAME, null, null, null, null, null, null);

 }



// neu DB cua cac ban co nhieu bang cac ban co the viet them cac

 // phuong thuc update,insert,delete,select cho cac bang nay tiep o ben duoi



 //.....



 // minh viet phuong thuc chung dung de SELECT trong CSDL DB_NAME = "MyDataBase.db"

 // khi truyen vao 1 cau select sql voi 1 bang bat ky trong DB thi ket qua tra ra la cursor



 public Cursor SELECTSQL(String sql) {

 return database.rawQuery(sql, null);

 }



// phuong thuc nay de dong DB khi khong su dung

 public void CloseBD() {

 if (database != null && database.isOpen())

 database.close();

 }



}

Bước 5: mở file MainActivity.Java

package com.example.sqlitedemo2;</pre>

import android.app.ListActivity;

import android.database.Cursor;

import android.os.Bundle;

import android.util.Log;

import android.view.Menu;

import android.widget.SimpleCursorAdapter;



public class MainActivity extends ListActivity {



private static final String TAG = "MainActivity";



private MySQLiteOpenHelper dataHelper;



private Cursor cursor; // tuong duong voi mang

 private SimpleCursorAdapter adapter; // tuong duong voi adapter



@Override

 protected void onCreate(Bundle savedInstanceState) {

 super.onCreate(savedInstanceState);

 setContentView(R.layout.activity_main);



 // khoi tao mot doi tuong MySQLiteOpenHelper

 dataHelper = new MySQLiteOpenHelper(MainActivity.this);



// insert Data vao Local DB

 LoadData();



// get DL de hien thi len listview



// neu ban muon get toan bo bang TB_NAME = "SinhVien" thi gan

 //cursor = dataHelper.SELECT_ALL__SinhVien();



 // trong vi du nay minh muon truyen vao 1 cau sql de select ra 1 bang gia tri

 String sql = "select * from " + MySQLiteOpenHelper.TB_NAME + " where "

 + MySQLiteOpenHelper.CL_id + " >7 and "

 + MySQLiteOpenHelper.CL_id + " <15";



 Log.d(TAG, sql);



 cursor = dataHelper.SELECTSQL(sql);



 // chung ta co the lay gia tri ung voi tung dong trong bang ket qua tra ra



 // Doan code duoi day huong dan cac ban cach lay tung dong du lieu

 // quet toan bo bang ket qua tra ve

 while (cursor.moveToNext()) {



 // lay gia tri cua cot id ung voi dong dang xet

 String id = cursor.getString(cursor

 .getColumnIndex(MySQLiteOpenHelper.CL_id));



if (Integer.parseInt(id) % 2 == 0) {

 // neu cot dang xet co id la chan

 // lay name va adress

 String name = cursor.getString(cursor

 .getColumnIndex(MySQLiteOpenHelper.CL_Name));

 String Address = cursor.getString(cursor

 .getColumnIndex(MySQLiteOpenHelper.CL_Address));

 // tam thoi minh chi log du lieu ra cac ban co the xu ly du lieu nay 1 cac tuy y

 Log.d(TAG, "id: " + id + " name: " + name + " add: " + Address);

 }

 }



 // cac ban nho dong DB khi khong can su dung nua

 dataHelper.CloseBD();

 // co the show toan bo cusor thong qua listview



 // khoi tao adater

 String[] from = { MySQLiteOpenHelper.CL_Name,

 MySQLiteOpenHelper.CL_Address };

 int[] to = { R.id.tvName, R.id.tvAddress };



adapter = new SimpleCursorAdapter(MainActivity.this,

 R.layout.layout_item, cursor, from, to);



 // setadapter cho listview

 setListAdapter(adapter);



}



@Override

 public boolean onCreateOptionsMenu(Menu menu) {

 // Inflate the menu; this adds items to the action bar if it is present.

 getMenuInflater().inflate(R.menu.main, menu);

 return true;

 }



private void LoadData() {



 // trong vi du nay minh tam thoi ghi 1 so du lieu xuong DB de co ket qua hien thi



 Student mStudent = new Student();

 mStudent.setName("Loc");

 mStudent.setAddress("TPHCM Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent);

 Student mStudent1 = new Student("Truong1", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent1);

 Student mStudent2 = new Student("Truong2", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent2);

 Student mStudent3 = new Student("Truong3", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent3);

 Student mStudent4 = new Student("Truong4", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent4);

 Student mStudent5 = new Student("Truong5", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent5);

 Student mStudent6 = new Student("Truong6", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent6);

 Student mStudent7 = new Student("Truong7", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent7);

 Student mStudent8 = new Student("Truong8", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent8);

 Student mStudent9 = new Student("Truong9", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent9);

 Student mStudent10 = new Student("Truong10", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent10);

 Student mStudent11 = new Student("Truong11", "Ha Noi Viet Nam");

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);

 dataHelper.INSERT_SinhVien(mStudent11);



}



}

Note: Cách kim tra các câu truy vn dùng SQLiteadmind

Trên thc tế vic viết sai các câu SQL là rt ph biến vì thế mình khuyến khích các bn nên đt log mi khi viết 1 câu SQL nào đó sau đó đ kim tra li câu SQL đã đúng chưa các bn có th copy vào tools sqliteadmind đ kim tra li bng cách

Copy DB các bn to ra v PC và m bng SQLite

Đ copy DB các bn vào DDMS-> File Explorer -> data -> data -><packet-name-your-project>

Như hình dưới

(nếu trên tools bar ca các bn không có DDMS các bn có th m bng cách chn Window->Open Perspective->Other -> DDMS)

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

Sau đó ly file*.db ca bn  ra máy tính theo hình

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

Dùng  tools SQLiteAdmin m file db các bn va ly v

Sau đó các bn có th th mi câu sql vi DB đó đ xem nó đúng hay sai

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

Note:Các bn có th theo dõi kết qu thc hin chương trình trên logcat và màn hình. Khi làm theo ví d các bn có gì không hiu có th đ li câu hi trên web mình s tr li các bn mt cách nhanh nht có th. Các bn có th down full src theo link dưới đây

SQLiteDemo2

Kết quả thực hiện chương trình

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

Android tutorials, SQLite, Sqlite for Android, ANDROID, android tips

                         

 HỖ TRỢ TRỰC TUYẾN