Giới thiệu SQLite trong lập trình Android

Thảo luận trong 'Lập trình phần mềm' bắt đầu bởi n_erudite, 20/1/16.

  1. n_erudite
    Tham gia ngày:
    4/1/16
    Bài viết:
    10
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nữ
    SQLite là một cơ sở dữ liệu mã nguồn mở, nghĩa là sử dụng để thực hiện các hoạt động cơ sở dữ liệu trên các thiết bị Android như lưu trữ, thao tác hoặc lấy dữ liệu liên tục từ các cơ sở dữ liệu khi lap trinh android . Nó được nhúng vào android bằng cách mặc định. Vì vậy, không có cần phải thực hiện bất kỳ thiết lập cơ sở dữ liệu hoặc công việc quản lý.

    Ở đây, chúng ta sẽ xem ví dụ của SQLite để lưu trữ và lấy dữ liệu. Dữ liệu được hiển thị trong logcat. Để hiển thị dữ liệu trên spinner hay listview, di chuyển đến trang tiếp theo. Lớp SQLiteOpenHelper cung cấp các chức năng để sử dụng cơ sở dữ liệu SQLite.

    Lớp SQLiteOpenHelper

    Lớp android.database.sqlite.SQLiteOpenHelper được sử dụng để tạo ra cơ sở dữ liệu và quản lý phiên bản. Để thực hiện bất kỳ hoạt động cơ sở dữ liệu, bạn phải cung cấp cho việc thực hiện các phương pháp onCreate() và onUpgrade() của lớp SQLiteOpenHelper.

    Cấu trúc của lớp SQLiteOpenHelper

    Có hai cấu trúc của lớp SQLiteOpenHelper.

    Cấu trúc Mô tả

    SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) tạo ra một đối tượng để tạo, mở và quản lý cơ sở dữ liệu.

    SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) tạo ra một đối tượng để tạo, mở và quản lý cơ sở dữ liệu. Nó chỉ định xử lý lỗi.

    Phương thức của lớp SQLiteOpenHelper

    Có rất nhiều phương pháp trong SQLiteOpenHelper lớp. Một số trong số họ là như sau:

    Phương thức Mô tả

    public abstract void onCreate(SQLiteDatabase db) gọi là chỉ một lần khi cơ sở dữ liệu được tạo ra lần đầu tiên.

    public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) gọi khi cơ sở dữ liệu cần phải được nâng cấp.

    public synchronized void close() đóng các đối tượng cơ sở dữ liệu.

    public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) gọi khi cơ sở dữ liệu cần phải được hạ cấp.

    Lớp SQLiteDatabase : Nó chứa các phương pháp được thực hiện trên cơ sở dữ liệu SQLite như tạo, cập nhật, xóa, chọn vv

    Phương thức của lớp SQLiteDatabase

    Có rất nhiều phương pháp trong SQLiteDatabase lớp. Một số trong số họ là như sau:

    Phương thức Mô tả

    void execSQL(String sql) thực hiện truy vấn sql query hoặc không query.

    long insert(String table, String nullColumnHack, ContentValues values) chèn một bản ghi trên các cơ sở dữ liệu. Bảng chỉ định tên bảng, nullColumnHack không cho phép các giá trị hoàn toàn vô giá trị. Nếu số thứ hai là null, android sẽ lưu trữ các giá trị null nếu giá trị là trống rỗng. Đối số thứ ba xác định các giá trị được lưu trữ.

    int update(String table, ContentValues values, String whereClause, String[] whereArgs) cập nhật một dòng.

    Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) trả về một con trỏ trên resultset.

    Ví dụ về cơ sở dữ liệu SQLite database

    Hãy xem các ví dụ đơn giản của cơ sở dữ liệu SQLite android.

    File: Contact.java
    Mã:
    package com.example.sqlite;public class Contact {int _id;String _name;String _phone_number;public Contact(){ }public Contact(int id, String name, String _phone_number){this._id = id;this._name = name;this._phone_number = _phone_number;}public Contact(String name, String _phone_number){this._name = name;this._phone_number = _phone_number;}public int getID(){return this._id;}public void setID(int id){this._id = id;}public String getName(){return this._name;}public void setName(String name){this._name = name;}public String getPhoneNumber(){return this._phone_number;}public void setPhoneNumber(String phone_number){this._phone_number = phone_number;}}
    File: DatabaseHandler.java

    Bây giờ, chúng ta hãy tạo ra các lớp xử lý cơ sở dữ liệu mở rộng lớp SQLiteOpenHelper và cung cấp cho việc thực hiện các phương pháp của nó.
    Mã:
    package com.example.sqlite;import java.util.ArrayList;import java.util.List;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DatabaseHandler extends SQLiteOpenHelper {private static final int DATABASE_VERSION = 1;private static final String DATABASE_NAME = "contactsManager";private static final String TABLE_CONTACTS = "contacts";private static final String KEY_ID = "id";private static final String KEY_NAME = "name";private static final String KEY_PH_NO = "phone_number";public DatabaseHandler(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);//3rd argument to be passed is CursorFactory instance}// Creating Tables@Overridepublic void onCreate(SQLiteDatabase db) {String CREATE_CONTACTS_TABLE = "CREATE TABLE " TABLE_CONTACTS "(" KEY_ID " INTEGER PRIMARY KEY," KEY_NAME " TEXT," KEY_PH_NO " TEXT" ")";db.execSQL(CREATE_CONTACTS_TABLE);}// Upgrading database@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// Drop older table if existeddb.execSQL("DROP TABLE IF EXISTS " TABLE_CONTACTS);// Create tables againonCreate(db);}// code to add the new contactvoid addContact(Contact contact) {SQLiteDatabase db = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(KEY_NAME, contact.getName()); // Contact Namevalues.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone// Inserting Rowdb.insert(TABLE_CONTACTS, null, values);//2nd argument is String containing nullColumnHackdb.close(); // Closing database connection}// code to get the single contactContact getContact(int id) {SQLiteDatabase db = this.getReadableDatabase();Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,KEY_NAME, KEY_PH_NO }, KEY_ID "=?",new String[] { String.valueOf(id) }, null, null, null, null);if (cursor != null)cursor.moveToFirst();Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),cursor.getString(1), cursor.getString(2));// return contactreturn contact;}// code to get all contacts in a list viewpublic List<Contact> getAllContacts() {List<Contact> contactList = new ArrayList<Contact>();// Select All QueryString selectQuery = "SELECT * FROM " TABLE_CONTACTS;SQLiteDatabase db = this.getWritableDatabase();Cursor cursor = db.rawQuery(selectQuery, null);// looping through all rows and adding to listif (cursor.moveToFirst()) {do {Contact contact = new Contact();contact.setID(Integer.parseInt(cursor.getString(0)));contact.setName(cursor.getString(1));contact.setPhoneNumber(cursor.getString(2));// Adding contact to listcontactList.add(contact);} while (cursor.moveToNext());}// return contact listreturn contactList;}// code to update the single contactpublic int updateContact(Contact contact) {SQLiteDatabase db = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(KEY_NAME, contact.getName());values.put(KEY_PH_NO, contact.getPhoneNumber());// updating rowreturn db.update(TABLE_CONTACTS, values, KEY_ID " = ?",new String[] { String.valueOf(contact.getID()) });}// Deleting single contactpublic void deleteContact(Contact contact) {SQLiteDatabase db = this.getWritableDatabase();db.delete(TABLE_CONTACTS, KEY_ID " = ?",new String[] { String.valueOf(contact.getID()) });db.close();}// Getting contacts Countpublic int getContactsCount() {String countQuery = "SELECT * FROM " TABLE_CONTACTS;SQLiteDatabase db = this.getReadableDatabase();Cursor cursor = db.rawQuery(countQuery, null);cursor.close();// return countreturn cursor.getCount();}}
    File: MainActivity.java
    Mã:
    package com.example.sqlite;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);DatabaseHandler db = new DatabaseHandler(this);// Inserting ContactsLog.d("Insert: ", "Inserting ..");db.addContact(new Contact("Ravi", "9100000000"));db.addContact(new Contact("Srinivas", "9199999999"));db.addContact(new Contact("Tommy", "9522222222"));db.addContact(new Contact("Karthik", "9533333333"));// Reading all contactsLog.d("Reading: ", "Reading all contacts..");List<Contact> contacts = db.getAllContacts();for (Contact cn : contacts) {String log = "Id: " cn.getID() " ,Name: " cn.getName() " ,Phone: " cn.getPhoneNumber();// Writing Contacts to logLog.d("Name: ", log);}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}
    Kết quả:

    Mở Logcat và nhìn thấy đầu ra. Đây là ví dụ cơ bản của SQLite Android mà không cần bất kỳ GUI. Đối với ứng dụng GUI với SQLite android, hãy truy cập trang tiếp theo.

    [​IMG]
     
    Cảm ơn đã xem bài:

    Giới thiệu SQLite trong lập trình Android

    Last edited by a moderator: 21/1/16
  2. hitonely
    Tham gia ngày:
    9/12/15
    Bài viết:
    63
    Đã được thích:
    0
    Điểm thành tích:
    6
    Giới tính:
    Nam
    cái cái này đem lại lợi ích gì cho điện thoại của mình hả cậu ơi