2015年1月23日

【Android】SQLite基礎資料庫存取應用實作

各位Android安卓開發者大家好!

小黑人原本還在想這次文章要分享的主題,然後突然看到SQL三個字母才想到好像關於資料庫的部分都還沒有與大家分享過,所以迅速決定這次要分享的主題就是SQLite資料庫存取應用
關於資料庫的運用目前已經使用很廣泛且熟練了,也是大多數App不可或缺的功能,例如像網路資訊或api串接溝通的資料下載,以及資料內容間的相互關聯性等都可以藉由SQLite資料庫做運用,那要怎麼針對不同的資訊內容建立不同的資料欄位呢?那就讓我們繼續看下去吧~


1.首先在程式端建立資料庫之前,要先思考好我們要儲存的資訊,例如像人的特徵有年齡、身高、體重之類的內容,那小黑人這次範例就舉例做個問卷資料型的資料庫內容好了,假設我們需要儲存的欄位有姓名、年齡、性別、電話、住址,確定好要儲存的資料欄位後我們就可以開始在程式端建立資料庫囉。

2.
建立SQLite Class,小黑人命名為SQLiteDB :

public class SQLiteDB extends SQLiteOpenHelper
{
        //db的
名稱
        public final static String DATABASE_NAME = "SQLITDB.db";
        //db的
版本
        public final static int DATABASE_VERSION = 1;
   
        public SQLiteDB(Context context)
        {
             super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db)
        {  
                //
建立dbTableTable裡的欄位項目
                String TABLE = "CREATE TABLE " + "sqldb" + " ("
                + "_id"  + " INTEGER primary key autoincrement, "
                + "name" + " text , "
                + "age" + " text , "
                + "sex" + " text , "
                + "phone" + " text , "
                + "address" + " text "+ ");";
    
                db.execSQL(TABLE);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
        }
   
        //
指標,db指向sqldbTable
        public Cursor select()
        {
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor cursor = db.query("sqldb", null, null, null, null, null, null);
            return cursor;
        }

        //
新增db Table內容,帶入姓名、年齡、性別、電話、地址
        public long insert(String name, String age, String sex, String phone, String address)
        {
            SQLiteDatabase db = this.getWritableDatabase();
            ContentValues cv = new ContentValues();
            cv.put("name", name);
            cv.put("age", age);
            cv.put("sex", sex);
            cv.put("phone", phone);
            cv.put("address", address);
            long row = db.insert("sqldb", null, cv);
            return row;
        }

        //
刪除Table單筆資料,帶入id
        public void delete(int id)
        {
            SQLiteDatabase db = this.getWritableDatabase();
            String where = "_id" + " = " + Integer.toString(id) ; 
            db.delete("sqldb", where, null);
        }
   
        //
刪除Table全部資料
        public void deleteAll()
        {
            SQLiteDatabase db = this.getWritableDatabase();
            db.execSQL("DELETE FROM " + " sqldb" );
        }
}

建立好資料庫DBClass後,就可以在Activity上開始使用囉!

3.
Activity上進行資料庫內容的寫入與讀取


a.DB
內容的儲存寫入:
    SQLiteDB mSQLiteDB = new SQLiteDB(MainActivity.this);
    //
寫入資料庫欄位資訊
    mSQLiteDB.insert("
小黑人","輸入年齡","輸入性別","電話號碼","小黑人的Android教室");
    mSQLiteDB.close();

    如果是多筆資料的話可以使用迴圈方式來寫入:
    private String[] Names = {"
小黑人1","小黑人2","小黑人3"};
    private String[] Ages = {"18
","24","30"};
    private String[] Sexs = {"
男生","女生","男生"};
    private String[] Phones = {"
電話號碼1","電話號碼2","電話號碼3"};
    private String[] Addresss = {"
地址1","地址2","地址3"};

    SQLiteDB mSQLiteDB = new SQLiteDB(MainActivity.this);
    for(int i = 0 ; i < Names.length ; i++)
    {
        mSQLiteDB.insert(Names[i], Ages[i] , Sexs[i] , Phones[i], Addresss[i]);
    }
    mSQLiteDB.close();

b.DB
資料的內容讀取 :
    SQLiteDB mSQLiteDB = new SQLiteDB(MainActivity.this);
    //
取得資料庫的指標
    Cursor mCursor = mSQLiteDB.select();
    //
將指標滑動到第一筆,取第一筆資料
    mCursor.moveToPosition(0);
    //
第一筆資料的姓名、年齡、性別、電話、地址資訊
    String Name = mCursor.getString(mCursor.getColumnIndex("name"));
    String Age = mCursor.getString(mCursor.getColumnIndex("age"));
    String Sex = mCursor.getString(mCursor.getColumnIndex("sex"));
    String Phone = mCursor.getString(mCursor.getColumnIndex("phone"));
    String Address = mCursor.getString(mCursor.getColumnIndex("address"));

    如果要一次取多筆資料的話可以使用迴圈方式讀取:
    for(int i = 0 ; i < mCursor.getCount() ; i++ )
    {
         //
利用for迴圈切換指標位置
         mCursor.moveToPosition(i);
         //
每筆姓名、年齡、性別、電話、地址資訊
         String Name = mCursor.getString(mCursor.getColumnIndex("name"));
         String Age = mCursor.getString(mCursor.getColumnIndex("age"));
         String Sex = mCursor.getString(mCursor.getColumnIndex("sex"));
         String Phone = mCursor.getString(mCursor.getColumnIndex("phone"));
         String Address = mCursor.getString(mCursor.getColumnIndex("address"));
    }

讀取資料部分比較需要注意的地方除了指標Cursor的位置移動外,取得資料的方式也需要多加注意。指標Cursor的移動可以用moveToPositionmoveToNext之類等方式,然後取得欄位資訊就可藉mCursor.getString()裡放入mCursor.getColumnIndex("要讀取的欄位項目名稱")來取得。 


P.S. 最後檢視建立好的資料庫結構如下 : 


以上就是基本資料庫運用到的
寫入讀取方法,大家可以試試看喔 ^^
謝謝大家,如有任何問題都可以和小黑人一起交流討論!

☆小黑人☆

4 則留言:

  1. 您好,謝謝您的肯定。 ^^
    感謝您的留言與支持!

    回覆刪除
  2. 您好~~請問我要怎麼看到資料庫裡面的資料呢?

    回覆刪除
  3. 請問一下 有篇"隱藏抽屜"的文章,不能留言。我想問一下怎麼把它用到右邊?

    回覆刪除
  4. 請問您的layout拉了哪些元件

    回覆刪除

謝謝大家支持,有任何問題都可以和小黑人一起討論!