Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> Android數據庫總結

Android數據庫總結

編輯:初級開發

任何的軟件開發都離不開數據,之前有很多朋友問關於Android可攜式數據庫的問題,今天就把我對於Android數據庫操作的總結分享給大家!         android采用關系型數據庫SQLite3,它是一個支持SQL輕量級的嵌入式數據庫,在嵌入式操作系統上有很廣泛的應用,WM采用的也是SQLite3         關於過於、原理方面的東西在這篇文章裡不會提到,但是如果你想能夠快速的學會操作SQLite3,那這就是你要找的文章!         首先,我們看一下api,所有數據庫相關的接口、類都在android.database和android.database.sqlite兩個包下,雖然只有兩個包,但是如果你英文不好或是太懶的話也要迷茫一段時間,其實,我們真正用的到的沒有幾個!         1、SQLiteOpenHelper (android.database.sqlite.SQLiteOpenHelper)         這是一個抽象類,關於抽象類我們都知道,如果要使用它,一定是繼承它!         這個類的方法很少,有一個構造方法         SQLiteOpenHelper(android.content.Context context,                 Java.lang.String name,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version);
        參數不做過多的解釋,CursorFactory一般直接傳null就可以         public void onCreate(SQLiteDatabase db)         public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        從方法名上我們就能知道這個方法是執行更新的,沒錯,當version改變是系統會調用這個方法,所以在這個方法裡應該執行刪除現有表,然後手動調用onCreate的操作         SQLiteDatabase getReadableDatabase()          獲取可讀的SQLiteDatabase對象         SQLiteDatabase getWritableDatabase()  
        獲取可寫的SQLiteDatabase對象         2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)         關於操作數據庫的工作(增、刪、查、改)都在這個類裡
        execSQL(sql)
        執行SQL語句,用這個方法+SQL語句可以非常方便的執行增、刪、查、改         除此之外,android還提供了功過方法實現增、刪、查、改
        long insert(TABLE_NAME, null, contentValues)添加記錄
        int delete(TABLE_NAME, where, whereValue)刪除記錄
        int update(TABLE_NAME, contentValues, where, whereValue) 更新記錄
        Cursor query(TABLE_NAME, null, null, null, null, null, null) 查詢記錄         除此之外,還有很多方法,如:beginTransaction()開始事務、endTransaction()結束事務...有興趣的可以自己看api,這裡就不多贅述了         3、Cursor(android.database.Cursor)         游標(接口),這個很熟悉了吧,Cursor裡的方法非常多,常用的有:
        boolean moveToPosition(position)將指針移動到某記錄
        getColumnIndex(Contacts.People.NAME)按列名獲取id
        int  getCount()獲取記錄總數
        boolean requery()重新查詢
        boolean  isAfterLast()指針是否在末尾
        boolean  isBeforeFirst()時候是開始位置
        boolean  isFirst()是否是第一條記錄
        boolean  isLast()是否是最後一條記錄
        boolean  moveToFirst()、        boolean  moveToLast()、        boolean  moveToNext()同moveToPosition(position)        
        4、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)         也許你會奇怪了,之前我還說過關於數據庫的操作都在database和database.sqlite包下,為什麼把一個Adapter放到這裡,如果你用過android的SQLite3,你一定會知道         SimpleCursorAdapter adapter =    new SimpleCursorAdapter(
                this,
                R.layout.list,
                myCursor,
                new String[] {DB.TEXT1,DB. TEXT2},
                new int[]{ R.id.listTextView1,R.id.listTextVIEw2 });
           myListVIEw.setAdapter(adapter);
        一共5個參數,具體如下:
        參數1:Content
        參數2:布局
        參數3:Cursor游標對象
        參數4:顯示的字段,傳入String[]
        參數5:顯示字段使用的組件,傳入int[],該數組中是TextVIEw組件的id         前面的只是幫沒做過的朋友做下普及,下面才是你真正需要的!
        一、寫一個類繼承SQLiteOpenHelpe
                public class DatabaseHelper extends SQLiteOpenHelper                 DatabaseHelper(Context context) {
                        super(context, DATABASE_NAME, null, DATABASE_VERSION);                 在onCreate方法裡寫建表的操作
                        public void onCreate(SQLiteDatabase db) {                                 String sql = "CREATE TABLE tb_test (_id INTEGER DEFAULT '1' NOT NULL PRIMARY KEY AUTOINCREMENT,class_jb TEXT  NOT NULL,class_ysbj TEXT  NOT NULL,title TEXT  NOT NULL,content_ysbj TEXT  NOT NULL)";                                 db.execSQL(sql);//需要異常捕獲                 在onUpgrade方法裡刪除現有表,然後手動調用onCtreate創建表
                        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                                String sql = "drop table "+tbname;
                                db.execSQL(sql);
                                onCreate(db);                
               定義對表增、刪、查、改的方法,這裡用的是SQLiteOpenHelper提供的方法,也可以用sql語句實現,都是一樣的
                關於獲取可讀/可寫SQLiteDatabase,我不說大家也應該會想到,只有查找才會用到可讀的SQLiteDatabase                         public long insert(String tname, int tage, String ttel){
                                SQLiteDatabase db= getWritableDatabase();//獲取可寫SQLiteDatabase對象
                                //ContentValues類似map,存入的是鍵值對
                                       ContentValues contentValues = new ContentValues();
                                       contentValues.put("tname", tname);
                                contentValues.put("tage", tage);
                                       contentValues.put("ttel", ttel);
                                return db.insert(tbname, null, contentValues);                        
                        public void delete(String _id){
                                SQLiteDatabase db= getWritableDatabase();
                                db.delete(tbname,
                                        "_id=?",
                                        new String[]{_id});                        
                        public void update(String _id,String tname, int tage, String ttel){
                                SQLiteDatabase db= getWritableDatabase();
                                        ContentValues contentValues = new ContentValues();
                                        contentValues.put("tname", tname);
                                        contentValues.put("tage", tage);
                                       contentValues.put("ttel", ttel);
                                     db.update(tbname, contentValues,
                                        "_id=?",
                                        new String[]{_id});                        
                        public Cursor select(){
                                SQLiteDatabase db = getReadableDatabase();
                                        return db.query(
                                                tbname,
                                                new String[]{"_id","tname","tage","ttel","taddr"},
                                                null,
                                                null, null, null, "_id desc");                         關於db.query方法的參數,有很多,為了防止大家弄亂,我簡單說一下
                        參數1:表名
                        參數2:返回數據包含的列信息,String數組裡放的都是列名
                        參數3:相當於sql裡的where,sql裡where後寫的內容放到這就行了,例如:tage>?
                        參數4:如果你在參數3裡寫了?(知道我為什麼寫tage>?了吧),那個這裡就是代替?的值 接上例:new String[]{"30"}
                        參數5:分組,不解釋了,不想分組就傳null
                        參數6:having,想不起來的看看SQL
                        參數7:orderBy排序                 到這裡,你已經完成了代碼最多的第一步!我們來看看都用到了那些類:
                        SQLiteOpenHelper我們繼承使用的
                        SQLiteDatabase增刪查改都離不開它,即使你直接用sql語句,也要用到execSQL(sql)                 二、這裡無非是對DatabaseHelper類定義方法的調用,沒什麼可說的,不過我還是對查詢再唠叨幾句吧
                        android查詢出來的結果一Cursor形式返回
                                 cursor = sqLiteHelper.select();//是不是很簡單?
                        查詢出來的cursor一般會顯示在listVIEw中,這就要用到剛才提到的SimpleCursorAdapter
                                SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                                                this,
                                                R.layout.list_row,
                                                cursor,
                                                new String[]{"tname","ttel"},
                                                new int[]{R.id.TextView01,R.id.TextVIEw02}
                                        );                         這回真沒了,是不是很簡單呢,任何復雜的工程都是通過簡單的代碼實現的,希望我的總結幫到了你!
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved