Giới thiệu SQLite trong Android

Thảo luận trong 'Game - Ứng dụng' bắt đầu bởi n_erudite, 20/1/16.

Đã xem: 976

  1. n_erudite Thành Viê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;
    }
    }
    >> Khóa học lập trình php cơ bản tại hà nội!

    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
    @Override
    public 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
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // Drop older table if existed
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
    
    // Create tables again
    onCreate(db);
    }
    
    // code to add the new contact
    void addContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();
    
    ContentValues values = new ContentValues();
    values.put(KEY_NAME, contact.getName()); // Contact Name
    values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone
    
    // Inserting Row
    db.insert(TABLE_CONTACTS, null, values);
    //2nd argument is String containing nullColumnHack
    db.close(); // Closing database connection
    }
    
    // code to get the single contact
    Contact 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 contact
    return contact;
    }
    
    // code to get all contacts in a list view
    public List<Contact> getAllContacts() {
    List<Contact> contactList = new ArrayList<Contact>();
    // Select All Query
    String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
    
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    
    // looping through all rows and adding to list
    if (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 list
    contactList.add(contact);
    } while (cursor.moveToNext());
    }
    
    // return contact list
    return contactList;
    }
    
    // code to update the single contact
    public 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 row
    return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
    new String[] { String.valueOf(contact.getID()) });
    }
    
    // Deleting single contact
    public void deleteContact(Contact contact) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
    new String[] { String.valueOf(contact.getID()) });
    db.close();
    }
    
    // Getting contacts Count
    public int getContactsCount() {
    String countQuery = "SELECT * FROM " + TABLE_CONTACTS;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(countQuery, null);
    cursor.close();
    
    // return count
    return cursor.getCount();
    }
    
    }
    Xem thêm: Khoa hoc lap trinh android tai ha noi !

    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 {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    DatabaseHandler db = new DatabaseHandler(this);
    
    // Inserting Contacts
    Log.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 contacts
    Log.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 log
    Log.d("Name: ", log);
    }
    }
    
    @Override
    public 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]


    ------------------- || -------------------
    Trung tâm Đào tạo khoa hoc lap trinh photoshop nâng cao tại VietPro!
     
    Đang tải...
    nam lim xanh

    Bình Luận Bằng Facebook