<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-348  評論-598  文章-0  trackbacks-0

    做應用開發(fā)難免需要用到數據庫,而做Android開發(fā)就更加會經常使用其自帶的SQLite數據庫了,因為使用SQLite比使用其他方式更加易于管理和操作。下面是我寫的一個數據庫操作抽象類,由于Android自帶的SQLite數據庫操作類已經幫助我們簡化了很多操作,所以這個抽象類主要是為了方便我們建庫和升級庫結構使用的

    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.util.Log;
    /**
     * TODO 數據庫幫手基類,一個數據庫對應一個具體實現(xiàn)。
     *         可以在內部定義表名,字段名和各種業(yè)務邏輯操作等等。
     *         對數據庫的增刪改操作,請使用事務管理。
     *         對數據的查詢操作,請在使用Cursor前,調用startManagingCursor()方法管理Cursor。
     * 

     
    */

    public abstract class AbstractDatabaseHelper {
        
        
    /**
         * SQLite數據庫實例 
         
    */

        
    protected SQLiteDatabase mDb = null;
        
        
    /**
         * 數據庫創(chuàng)建幫手
         
    */

        
    protected CreateDBHelper mDbHelper = null;
        
        
    /**
         * 獲得當前數據庫幫手類標識(一般是該類名稱),用于日志等的記錄
         * 
    @return
         
    */

        
    protected abstract String getTag();
        
        
    /**
         * 獲得數據庫名稱
         * 
    @return
         
    */

        
    protected abstract String getDatabaseName();
        
        
    /**
         * 獲得數據庫版本,值至少為1。
         * 當數據庫結構發(fā)生改變的時候,請將此值加1,系統(tǒng)會在初始化時自動調用
         * createDBTables和dropDBTables方法更新數據庫結構。
         * 
    @return
         
    */

        
    protected abstract int getDatabaseVersion();
        
        
    /**
         * 創(chuàng)建數據庫表的SQL語句,一個元素一條語句
         * 
    @return
         
    */

        
    protected abstract String[] createDBTables();
        
        
    /**
         * 刪除數據庫表的SQL語句,一個元素一條語句
         * 
    @return
         
    */

        
    protected abstract String[] dropDBTables();
        
        
    /**
         * 
         * TODO 內部數據庫創(chuàng)建幫手類
         * 

         
    */

        
    private class CreateDBHelper extends SQLiteOpenHelper
        
    {
            
    public CreateDBHelper(Context ctx)
            
    {
                
    super(ctx, getDatabaseName(), null, getDatabaseVersion());
            }

            @Override
            
    public void onCreate(SQLiteDatabase db) {
                
    // TODO Auto-generated method stub
                executeBatch(createDBTables(), db);
            }


            @Override
            
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                
    // TODO Auto-generated method stub
                Log.w(getTag(), "Upgrading database '" + getDatabaseName() + "' from version " + oldVersion + " to " + newVersion);
                executeBatch(dropDBTables(), db);
                onCreate(db);
            }

            
            
    /**
             * 批量執(zhí)行Sql語句
             * 
    @param sqls
             * 
    @param db
             
    */

            
    private void executeBatch(String[] sqls, SQLiteDatabase db)
            
    {
                
    if(sqls == null)
                    
    return;
                
                db.beginTransaction();
                
    try
                
    {
                    
    int len = sqls.length;
                    
    for(int i = 0; i < len; i++)
                    
    {
                        db.execSQL(sqls[i]);
                    }

                    db.setTransactionSuccessful();
                }
    catch(Exception e){
                    Log.e(getTag(), e.getMessage(), e);
                }
    finally{
                    db.endTransaction();
                }


            }

            
        }

        
        
    /**
         * 打開或者創(chuàng)建一個指定名稱的數據庫
         * 
    @param dbName
         * 
    @param ctx
         
    */

        
    public void open(Context ctx)
        
    {
            Log.i(getTag(), 
    "Open database '" + getDatabaseName() + "'");
            mDbHelper 
    = new CreateDBHelper(ctx);
            mDb 
    = mDbHelper.getWritableDatabase();
        }

        
        
    /**
         * 關閉數據庫
         
    */

        
    public void close()
        
    {
            
    if(mDbHelper != null)
            
    {
                Log.i(getTag(), 
    "Close database '" + getDatabaseName() + "'");
                mDbHelper.close();
            }
        
        }

        
    }

    如果想使用這個類,你需要編寫一個子類繼承此類并實現(xiàn)相應的抽象方法(主要是返回一些字符串),同時可以在內部定義表名,字段名和各種業(yè)務邏輯操作(CRUD)等等。這樣子類在被初始化并open之后,就會自動檢查數據庫是否被創(chuàng)建以及數據庫版本是否匹配,如果沒有被創(chuàng)建,則會自動被創(chuàng)建;如果版本變化了,則會自動調用onUpgrade方法,升級數據庫表結構。雖然此類簡化的工作量不多,但我們可以將它作為一個主體,基于這個主體,再根據業(yè)務,就可以實現(xiàn)更豐富的功能了。

    ---------------------------------------------------------
    專注移動開發(fā)

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2009-03-07 00:30 TiGERTiAN 閱讀(3622) 評論(1)  編輯  收藏 所屬分類: Java 、Android

    評論:
    # re: Android開發(fā)小記--開發(fā)實用工具類--數據庫操作類 2010-01-27 16:27 | 過河卒
    我也寫了個類似的東東.呵呵  回復  更多評論
      
    主站蜘蛛池模板: 免费毛片毛片网址| 亚洲А∨精品天堂在线| 中国国语毛片免费观看视频| 亚洲一本到无码av中文字幕| 久久国产精品亚洲一区二区| 亚洲精品岛国片在线观看| 成人黄页网站免费观看大全| 120秒男女动态视频免费| 中文字幕在线免费播放| 女bbbbxxxx另类亚洲| 中文字幕亚洲情99在线| 亚洲午夜精品一区二区 | 久久午夜夜伦鲁鲁片免费无码影视| 久久亚洲色WWW成人欧美| 麻豆狠色伊人亚洲综合网站 | 成人国产网站v片免费观看 | 7777久久亚洲中文字幕| 91大神亚洲影视在线| 亚洲av女电影网| 亚洲精品无码不卡在线播HE| 日韩国产免费一区二区三区| 无码国产精品一区二区免费16| 国产一区二区三区免费观在线| 一级毛片成人免费看a| 青青视频免费在线| 免费大片黄在线观看| 国产精品亚洲一区二区三区| 国产午夜亚洲精品不卡免下载| 亚洲av午夜电影在线观看| 亚洲精品国产高清在线观看| 亚洲大尺度无码无码专线一区| 亚洲乱妇熟女爽到高潮的片| 亚洲爆乳少妇无码激情| 亚洲国产精品网站在线播放| 亚洲国产精品嫩草影院| 色窝窝亚洲AV网在线观看| 国产成人综合久久精品亚洲| 国产亚洲精品国产福利在线观看| 青娱乐在线视频免费观看| 一级特级aaaa毛片免费观看 | 亚洲综合在线另类色区奇米|