2014年3月26日 星期三

Android 開發 (三十六) GreenDao DB library

由於之前在android上使用sqlite的經驗不是很好,大量的table大量的insert/query method
在管理上面很麻煩,而且相關程式不是很好維護(也可能是程式沒寫好啦XD),
基於上述原因,在一次機會碰到了greenDao,剛好有時間,所以就花了點時間來研究

以下是簡單的使用說明

greendao 的相關sourceCode可以在https://github.com/greenrobot/greenDAO 下載
假設有freemarker錯誤可以再下載 http://freemarker.org/freemarkerdownload.html 最新版本
在解掉相關的build error之後

首先先看看DaoExampleGenerator
這是個方便我們建立DB相關class的project


以上是自定義的table,不需要像以前建table需要龐大的程式碼,而且寫好之後只需要build該project他就會將相關的class build到 src-gen的資料夾底下

接著在我們的project裡面只需要做簡單的設定


    private SQLiteDatabase db;
    private DaoMaster daoMaster;
    private DaoSession daoSession;
    private MyDBDao mydbDao;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
        db = helper.getWritableDatabase();
        daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
        mydbDao = daoSession.getMyDBDao();

這樣db建立就完成了,接著示範簡單的insert 和 query


       String noteText = editText.getText().toString();
       double id = Double.parseDouble(noteText);
       String noteText2 = editText2.getText().toString();
       double id2 = Double.parseDouble(noteText2);
          editText.setText("");
          editText2.setText("");
          MyDB note = new MyDB(null, id, id2, Math.pow(id, 2)+Math.pow(id2, 2));
          mydbDao.insert(note);

這樣可以很輕鬆的insert data,如果是要query的話也有提供簡單的method

    for(MyDB db :mydbDao.queryBuilder().list())
    {
     Log.d("Ted", db.getLatitude()+" "+db.getLongitude()+" "+db.getDistance());
    }
    Log.d("Ted"," compare");
    for(MyDB db :mydbDao.queryBuilder().orderDesc(Properties.Distance).list())
    {
     Log.d("Ted", db.getLatitude()+" "+db.getLongitude()+" "+db.getDistance());
    }

GreenDao是蠻方便的,就連我這個sqlite新手也都輕鬆上手,對於單純存資料,做簡單sort動作算是很足夠了。

最後附上sample Code

沒有留言:

張貼留言