android數據庫持久化框架

android數據庫持久化框架java

前言

    Android中內置了SQLite,可是對於數據庫操做這塊,很是的麻煩.其實能夠試用第3方的數據庫持久化框架對之進行結構上調整, 擺脫了訪問數據庫操做的細節,不用再去寫複雜的SQL語句.雖然這樣會在數據庫操做上損失一點性能,但基於xxxx對數據庫操做不頻繁性能要求不高可使用,所帶來的好處即便有一個良好的統一的數據庫操做以及下降代碼維護成本.python

   適合與android的數據庫持久化框架主流的有2: andrormormlite.簡單的對這2種框架以及SQLiteCPU:1GHz,RAM:512Mandroid的及其上進行插入1W條數據的性能測試,獲得的結果以下: SQLite=287.488s; androrm=310.562s;ormlite=333.760s.可見使用原始的SQLite性能最高. 因爲ormlite用註解字段的方式,使得在性能有着必定的損失. 不過, ormlite架構更適合java,並且相似hibernate,androrm適合與python.android

   下面就對ormlite框架進行簡單的介紹.數據庫

1.  ormlite框架

1.  http://ormlite.com/releases/下載對應的核心包coreandroid支持庫.而後在項目中加入兩個jar.架構

2.  存儲的數據對象實體框架

public class Entity{ide

    @DatabaseField(generatedId = true)//自增加的主鍵函數

    int id;性能

    @DatabaseField//聲明string爲數據庫字段測試

    String string;

   

    public Entity() {

        //ormlite中必需要有一個無參的構造函數

    }

    ...

}

ormlite是經過註解方式配置該類的持久化參數,其中經常使用參數以下:

1.表名:不指定的話表名就是類名.

@DatabaseTable(tableName="dataTableName")

2.字段:這個能夠配置的屬性有點多.

@DatabaseField

(1)主鍵:

@DatabaseField(id=true)

(2)列名: 不指定的話就是和變量名同樣的

@DatabaseField(columnName="columnName")

(3) 數據類型: 這個通常狀況下都不用指定,能夠根據java 類得到

@DatabaseField(dataType=DataType.INTEGER)

(4) 默認值:

@DatabaseField(defaultValue="0")

(5)長度:通常用於String

@DatabaseField(width=13)

(6) 可否爲空:默認爲True

@DatabaseField(canBeNull=false)

3.  須要數據DataHelper,來建立及管理數據庫. DataHelper類繼承OrmLiteSqliteOpenHelper.並在覆蓋實現onCreate, onUpgrade, close等方法.

 

    @Override

    public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource){

       try{

           Log.e(DataHelper.class.getName(), "開始建立數據庫");

           TableUtils.createTable(connectionSource, Entity.class);

 

           Log.e(DataHelper.class.getName(), "建立數據庫成功");

       }catch(SQLException e){

           Log.e(DataHelper.class.getName(), "建立數據庫失敗", e);

       }

    }

 

    @Override

    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int arg2, int arg3){

       try{

           TableUtils.dropTable(connectionSource, Entity.class, true);

           onCreate(db, connectionSource);

           Log.e(DataHelper.class.getName(), "更新數據庫成功");

       }catch(SQLException e){

           Log.e(DataHelper.class.getName(), "更新數據庫失敗", e);

       }

    }

 

    @Override

    public void close(){

       super.close();

    }

4.  須要相應的數據Dao,即數據訪問接口.

public class EntityDao{

  public List<Entity> findData(Dao<Entity, Integer> Entitydao, int id) throws SQLException{

     HashMap<String, Object> EntityMap = new HashMap<String, Object>();

     userguideMap.put("id", id);

     List<Entity> EntityLists = entityDao.queryForFieldValues(EntityMap);

     return EntityLists == null ? null : EntityLists;

  }

 

  public void addEntity(Dao<Entity, Integer> entityDao, String string) throws SQLException{

     Entity Entity =new Entity(string);

     entityDao.create(Entity);

  }

}

5.  調用

ormlite有兩種使用方法,一種是繼承對應的OrmLiteBaseActivity.但像xxxx Activity自己必須繼承BaseActivity,這樣就必須使用另一種方法:在activity中添加一個獲取helper的方法,還有在onDestroy中添加及時關閉helper的方法。

    private DataHelper dataHelper = null;

 

    private DataHelper getHelper() {

       if (dataHelper == null) {

           dataHelper = OpenHelperManager.getHelper(this, DataHelper.class);

       }

       return dataHelper;

    }

 

    @Override

    protected void onDestroy() {

       // TODO Auto-generated method stub

       super.onDestroy();

       if (dataHelper != null) {

           OpenHelperManager.releaseHelper();

           dataHelper = null;

       }

}

 

   其中數據庫操做實現代碼以下:

    EntityDao dao = new EntityDao();

    try {

       Dao<Entity, Integer> dataDao = getHelper().getDataDao();

       //查找操做調用

       List<Entity> simpledataList = dao.findData(dataDao, 1);

       //添加操做調用

       dao.addEntity(dataDao,"demotest");

    } catch (SQLException e) {

       e.printStackTrace();

}

相關文章
相關標籤/搜索