Header Ads

Hướng dẫn sử dụng SQLite làm app todo trong android

SQLite là nơi lưu trữ dữ liệu mà hệ điều hành android đã hỗ trợ sẵn lên việc cài đặt và sử dụng nó trong Android Studio cũng khá dễ dàng, yêu cầu của bài học này là đã học android cơ bản và SQL cơ bản nhé.





Bước đầu tiên các bạn mở android studio lên, và tạo một project mới với tên là ToDoApp, chọn các tùy chọn mặc định, sau khi tạo xong chúng ta bắt đầu làm việc với SQLite nhé :D



Tạo các package nhé, vào thư mục gốc todoapp chọn: new -> package
Các pakage cần tạo:
model
view -> main
sqlite



sqlite todoapp

Tiếp theo trong pakage sqlite chọn: new -> javaclass
Tên class là SQLiteHelper.java
Sau đó ta kế thừa từ lớp SQLiteOpenHelperLớp SQLiteOpenHelper 2 hàm quan trọng

1. onCreate hàm này giúp tạo ra các bảng 
2. onUpgrade hàm này chạy khi chúng ta muốn thay đổi cấu trúc của bảng, và version mới > version cũ
Ban đầu chúng sẽ xóa các bảng cũ đi
Sau đó tạo ra các bảng mới với các cột mới, dữ liệu sẽ bị xóa hết 


package com.jundat95.todoapp.sqlite;

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

import com.jundat95.todoapp.model.ToDo;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by tinhngo on 12/10/2017.
 */

public class SQLiteHelper extends SQLiteOpenHelper {

    public static final String Database_Name = "ICTU";
    public static final String Table_Todo = "ToDo";
    public static final String Id = "Id";
    public static final String Title = "Title";
    public static final String Date = "Date";
    public static final String Content = "Content";

    public SQLiteHelper(Context context, int version) {
        // ham khoi tao class, khi chay se tao ra mot cai database
        super(context, Database_Name, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        // Lan dau tien chay se tao ra cac bang du lieu
        // Khi tang version > hon version cu cung se chay vao day

        // Lệnh tạo bảng trong SQL
        // Lưu ý các xâu đầu xâu cuối xâu đều có dấu cách
        String createTableTodo = " create table "+ Table_Todo + " ( "
                + Id + " text primary key , "
                + Title + " text , "
                + Date + " text, "
                + Content + " text ) "
                ;

        // Tạo bảng
        sqLiteDatabase.execSQL(createTableTodo);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        // Ham chay khi version moi > version cu

        // Lenh Sql xoa bang
        String dropTableTodo = "drop table if exists " + Table_Todo;
        // Thu hien xoa bang
        sqLiteDatabase.execSQL(dropTableTodo);

        // Sau khi xoa bang xong, chung ta chay lai ham onCreate o tren
        onCreate(sqLiteDatabase);
        // Lúc này khi cập nhật các cột cho bảng thì nó chạy lại hàm tạo mới
        // Lúc này tạo ra cái bảng mới có các cột đã được sửa đổi và không có gì ở trong
    }

    /***
     * Cách 1
     * Lấy toàn bộ dữ liệu trong bảng Todo
     * Lưu vào con trỏ cursor
     * @return Cursor
     */
    public Cursor getTodos() {
        // getReadableDatabase là sử dụng quyền chỉ đọc dữ liệu chứ không nghi được
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();

        // Lệnh SQL lấy toàn bộ bảng Todo
        String query = " select * from " + Table_Todo;

        // Thực hiện lệnh SQL, kết quả lưu vào Cursor( Con trỏ )
        Cursor cursor = sqLiteDatabase.rawQuery(query, null);
        return cursor;
    }

    /***
     * Cách 2
     * Lấy toàn bộ dữ liệu trong ToDo
     * Dữ liệu lấy về lưu vào danh sách
     * @return List
     */
    public List getToDos() {
        // Tạo một danh sách Todo từ mode
        List toDos = new ArrayList<>();

        // getReadableDatabase là sử dụng quyền chỉ đọc dữ liệu chứ không nghi được
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();

        // Lệnh SQL lấy toàn bộ bảng Todo
        String query = " select * from " + Table_Todo;

        // Thực hiện lệnh SQL, kết quả lưu vào Cursor( Con trỏ )
        Cursor cursor = sqLiteDatabase.rawQuery(query, null);

        // Duyệt toàn bộ con trỏ khi còn dữ liệu
        while (cursor.moveToNext()){
            // Tạo ra một đối tượng Todo để lưu trữ dữ liệu
            // cursor.getString(int i) - i là thứ tự của các cột trong bảng
            ToDo toDo = new ToDo(
                    cursor.getString(0),
                    cursor.getString(1),
                    cursor.getString(2),
                    cursor.getString(3)
            );

            // Thêm 1 đối tượng vào danh sách
            toDos.add(toDo);
        }

        return toDos;
    }

    /***
     * Thêm dữ liệu vào bảng 
     * Trả lại số dòng thêm được vào bảng, ví dụ thêm hai dòng nó sẽ trả về là 2 
     * @param contentValues 
     * @return long 
     */
    public long addToDo(ContentValues contentValues) {
        // getWritableDatabase là sử dụng quyền vừa đọc dữ liệu vừa nghi được
        SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
        // hàm insert có 3 tham số truyền vào
        // tên bảng cần thêm, danh sách các cột không thêm, dữ liệu truyền vào contentValue
        return sqLiteDatabase.insert(Table_Todo, null, contentValues);
    }

}


Để biết xem lớp SQLiteHelper chạy ổn không chúng ta sẽ sang hàm main để test thử Bên đây chúng ta sẽ gọi lớp SQLitehelper và sử dụng thôi :D

Hiện tại chúng ta chỉ test khi thêm dữ liệu hoặc khi lấy dữ liệu ra sẽ Toast lên màn hình
Bài tiếp theo mình sẽ hướng dẫn các bạn sử dụng listview để đưa dữ liệu lên nhìn sẽ trực quan hơn





package com.jundat95.todoapp.view.main;

import android.content.ContentValues;
import android.database.Cursor;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.jundat95.todoapp.R;
import com.jundat95.todoapp.sqlite.SQLiteHelper;

import java.util.Date;

public class MainActivity extends AppCompatActivity {

    private SQLiteHelper sqLiteHelper = new SQLiteHelper(this, 2);

    private TextView tvContent;

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

        init();
        //addToDo();
        getToDo();
    }

    // Ánh xạ các thuộc tính từ bên giao diện sang
    private void init() {
       tvContent = (TextView) findViewById(R.id.tvContent);

    }

    private void addToDo() {
        ContentValues contentValues = new ContentValues();

        String time = new Date().getTime() + "";
        String date = new Date() +  "";

        contentValues.put(SQLiteHelper.Id, time);
        contentValues.put(SQLiteHelper.Title, "Hello "+ time);
        contentValues.put(SQLiteHelper.Date, date);
        contentValues.put(SQLiteHelper.Content, "Xin chao ba con " + time);

        long n = sqLiteHelper.addToDo(contentValues);
        Toast.makeText(this, "Add complete: " + n, Toast.LENGTH_SHORT).show();
    }

    private void getToDo() {
        Cursor cursor = sqLiteHelper.getTodos();
        String data = "";
        while (cursor.moveToNext()){
            data += ""+cursor.getString(0)+"-"+cursor.getString(1)+"-"+cursor.getString(2)+"-"+cursor.getString(3)+"\n";
            Toast.makeText(
                    this,
                    ""+cursor.getString(0)+"-"+cursor.getString(1)+"-"+cursor.getString(2),
                    Toast.LENGTH_SHORT).show();
        }

        tvContent.setText(data);
    }

}


Class ToDo trong thư mục model


package com.jundat95.todoapp.model;

/**
 * Created by tinhngo on 12/10/2017.
 */

public class ToDo {

    private String Id;
    private String Title;
    private String Date;
    private String Content;

    public ToDo(String id, String title, String date, String content) {
        Id = id;
        Title = title;
        Date = date;
        Content = content;
    }

    public String getId() {
        return Id;
    }

    public void setId(String id) {
        Id = id;
    }

    public String getTitle() {
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }

    public String getDate() {
        return Date;
    }

    public void setDate(String date) {
        Date = date;
    }

    public String getContent() {
        return Content;
    }

    public void setContent(String content) {
        Content = content;
    }
}

Các chức năng hiển thị lên listview, xem chi tiết, xóa, sẽ có trong bài viết sau.

Thankyou like and Shared page !!

No comments