GreenDao使用步驟及出錯筆記(插入數據庫失敗,表中id衝突)

1.首先還是說下使用greendao的步驟

    不得不說在目前幾個主流數據庫框架的使用中,greendao一直以高效,簡單易用在Android開發人員中廣泛得到認可和好評。下面說下greendao的簡單使用步驟:

    <1> 如圖,首先在你的project中的gradle裏面設置工具依賴

    <2>接着在你的app中的gradle裏面導包

   

注:請忽略我其他包的引用,這些都是我重新搭建項目的一些基礎框架的引用,相信大家的選擇估計也跟我大差不離>-<

    <3>給你將要存儲到數據庫中的對象添加註解

 注:這裏我只是簡單的貼一下主要的2個註解,一個是類的註解@Entity  一個是主鍵id 這裏是自增

    <4>make project 讓項目自動生成Greendao的DaoMaster,DaoSession以及與對象對應的表操作對象dao

    <5>配置數據庫 將表操作對象的管理者也就是DaoSession 初始化   這裏一般將它初始化後放在應用全局中以供調用,所以這裏一般都寫在Application啓動時獲取並持有。 


    <6> 最後,寫一個操作工具類對錶進行增刪改查的操作

 
/**
 * Created by qi.yang on 2018/3/9 0009.
 */

public class ExampleTestDao {
    /**
     * 添加數據,如果有重複則替換
     * @param info
     */
    public static void insertOrReplace(ExampleTestInfo info){
        MyApplication.getDaoInstant().getExampleTestInfoDao().insertOrReplace(info);
    }

    /**
     * 添加數據,直接添加
     * @param info
     */
    public static void insert(ExampleTestInfo info){
        MyApplication.getDaoInstant().getExampleTestInfoDao().insert(info);
    }

    /**
     * 刪除數據 刪除條件:id
     * @param id
     */
    public static void delete(long id){
        if(checkExist(id)) {
            MyApplication.getDaoInstant().getExampleTestInfoDao().deleteByKey(id);
        }
    }

    /**
     * 更新數據
     * @param info
     */
    public static void update(ExampleTestInfo info){
        if(checkExist(info.getId())) {
            MyApplication.getDaoInstant().getExampleTestInfoDao().update(info);
        }
    }


    /**
     * 查詢所有數據
     * @return
     */
    public static List<ExampleTestInfo> queryAll(){
        return MyApplication.getDaoInstant().getExampleTestInfoDao().loadAll();
    }

    /**
     * 查詢條件爲Name的列表
     * @return
     */
    public static List<ExampleTestInfo> queryList(String name){
        return  MyApplication.getDaoInstant().getExampleTestInfoDao().queryBuilder().where(ExampleTestInfoDao.Properties.Name.eq(name)).list();
    }


    /**
     * 檢查需要修改的對象存在與否
     * @param id
     * @return
     */
    private static boolean checkExist(long id){
        ExampleTestInfo info = MyApplication.getDaoInstant().getExampleTestInfoDao().queryBuilder().where(ExampleTestInfoDao.Properties.Id.eq(id)).build().unique();
        if(info == null){
            ToastUtil.showToast(MyApplication.getmInstance().getApplicationContext(),"需要修改的對象不存在");
        }

        return info != null;
    }
}

注意:這裏的所有導包 我就沒貼了  各位自己自動導一下就好了   可能有些同學會問爲什麼不直接daosession.getdao......而是還要多個步驟寫一個工具類,這個問題我相信絕大部分開發者應該都知道爲什麼這樣做,但這裏我也稍微簡單說明下,也給自己加深下好的編碼習慣和良好開發的思維。之所以這樣做,是爲了拓展我們代碼的可移植性,也提高我們代碼的可維護性。當你直接去用第三方jar的方法去做一件事情,並且這件事情在很多地方都會用到時,那麼以後當你需要替換這個jar或者替換這個框架的時候,它在可移植性上幾乎沒有,並且維護成本很高。類似於此的有很多第三方框架的使用,都需要程序員給它多“包”一層,自定義一個自己的工具類去做這些事情。好了,題外的口水話就說到這,大部分同行都知道。

2.處理報錯

最後處理這個報錯,之前當我insert一個新的對象沒有指定id時,報插入數據庫失敗,主鍵id衝突,當時我想的是 我的自增沒錯!greendao難道在我沒有給指定id初始值就爲0?然後給我自增了1,與數據庫本來就保存的一條數據id爲1的衝突了?所以情況是這樣的情況,怎麼回事?當我仔細檢查後,發現我的對象裏面的id類型是long不是Long!爲了這麼個小的誤差,耽誤我debug好幾次。粗心總是改不了,但好在能通過現象想到可能哪裏出錯。這篇文章就當是greendao的初步使用和提醒自己的一個筆記吧,好久沒用CSDN了,如果不嫌我囉嗦,麻煩看到了點個小小的贊吧~ 小生不勝欣喜!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章