組件化項目使用GreenDao時注意的事項:
1.要在組件化中的基礎庫(domain層)創建實體類;
2.如果sycn之后不能生產Dao文件,使用 Android Studio 的Gradle插件重新build項目,如圖:

build之后就會生成 GreenDao的相關文件了。
3.GreenDao還有一個巨坑的地方,就是你的Bean里的主鍵不要命名為 “id” ,比如醬紫:
@Id private Long id; private String name;
然后根據 id 查詢:
![]()
出現異常:
android.database.sqlite.SQLiteException:
no such column: id (code 1): , while compiling: SELECT T."_id",T."NAME" FROM "USER" T where id between ? and ? at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:898) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:509) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
從錯誤日志可以看出 GreenDao內部把 id 轉成了 _id !!!所以說我們在建實體的時候要避免命名為 id,而是換用其他的 名稱。
當然,在接口已經出好不便修改的情況下,有兩種方案:
一是我們在做 查詢的切記用 _id 去查,或是用GreenDao建表時生成的大寫 ID 去查詢;
二是用 Dao 中的 Properties.Id 去做查詢
public static class Properties { public final static Property Id = new Property(0, String.class, "id", true, "ID"); public final static Property TaskId = new Property(1, String.class, "taskId", false, "TASK_ID"); public final static Property TaskNum = new Property(2, String.class, "taskNum", false, "TASK_NUM"); public final static Property Zcfdd = new Property(3, String.class, "zcfdd", false, "ZCFDD");
...
}
查詢操作:
QueryBuilder<User> builder = userDao.queryBuilder(); List<User> userList3 = builder.where(UserDao.Properties.Id.gt(1005)).build().list();
附上 Demo :
4.GreenDao查詢數據一個為空,一個不為空的問題。
2018年7月12日 - 周三 今天活脫脫被自己坑了一把。。。。

對應的結果實體類:

問題出現在每次用 UpAssetResultDao 查詢的時候都查不全,一個有result集合,另一個卻為空數組。。
問題代碼:
resultBeanDao.insertOrReplaceInTx(mTableList);// 1 ResultBean 插入數據集合
UpAssetResult upResult = new UpAssetResult(); ... upResult.setTaskId(pk); upResult.setResult(mTableList); //2 TODO 直接用 List<UpAssetResult> list = upAssetResultDao.loadAll(); 數據不全的問題 // List<UpAssetResult> dataList = new ArrayList<>(); // dataList.add(upResult); upAssetResultDao.insertOrReplaceInTx(upResult);
L.e("resultBeanDao size :" + resultBeanDao.count());//3 插入成功
錯就錯在紅色字體處,UpAssetResult 實體是通過外建關聯 ResultBean 的id進行數據綁定的,
紅色部分在ResultBean外面又封裝了一層 List 雖然數據也能成功插入到ResultBean的數據庫表中,但是沒有關聯上 UpAssetResult
實體。導致后面操作UpAssetResultDao 進行查詢時出現數據異常的問題!!!
