GreenDao 使用二

1.创建一个实体类

 

1
Entity note = schema.addEntity( "Note" );

默认表名就是类名,也可以自定义表名

 

1. dao.setTableName("NoteList");

greenDAO会自动根据实体类属性创建表字段,并赋予默认值。例如在数据库方面的表名和列名都来源于实体类名和属性名。默认的数据库名称是大写使用下划线分隔单词,而不是在Java中使用的驼峰式大小写风格。例如,一个名为“CREATIONDATE”属性将成为一个数据库列“CREATION_DATE”。

 

设置一个自增长ID列为主键:

 

1. dao.addIdProperty().primaryKey().autoincrement();

 

设置其他各种类型的属性:

 

1
2
3
dao.addIntProperty( "cityId" );
dao.addStringProperty( "infoType" ).notNull(); //非null字段
dao.addDoubleProperty( "Id" );

在生成的实体类中,int类型为自动转为long类型。

如果在编译过程中出现以下错误,那么有可能是主键的类型错误所致:

1. java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

 

在使用greenDAO时,一个实体类只能对应一个表,目前没法做到一个表对应多个实体类,或者多个表共用一种对象类型。后续的升级也不会针对这一点进行扩展。

 

(二)表的增删改查

增删改查相当方便,完全的面向对象,不需要涉及到任何的sql语言。

1.查询

范例1:查询某个表是否包含某个id:

 

1. public boolean isSaved(int ID)
2. {
3. QueryBuilder<SaveList> qb = saveListDao.queryBuilder();
4. qb.where(Properties.Id.eq(ID));
5. qb.buildCount().count();
6. return qb.buildCount().count() > 0 true false;
7. }

 

范例2:获取整个表的数据集合,一句代码就搞定!

 

1
2
3
4
public  List<PhotoGalleryDB> getPhotoGallery()
{
     return  photoGalleryDao.loadAll(); // 获取图片相册
}

 

范例3:通过一个字段值查找对应的另一个字段值(为简便直接使用下面方法,也许有更简单的方法,尚未尝试)

 

 

01. /** 通过图片id查找其目录id */
02. public int getTypeId(int picId)
03. {
04. QueryBuilder<PhotoGalleryDB> qb = photoGalleryDao.queryBuilder();
05. qb.where(Properties.Id.eq(picId));
06. if (qb.list().size() > 0)
07. {
08. return qb.list().get(0).getTypeId();
09. }
10. else
11. {
12. return -1;
13. }
14. }

 

范例4:查找所有第一姓名是“Joe”并且以lastname排序。

 

1. List joes = userDao.queryBuilder()
2. .where(Properties.FirstName.eq("Joe"))
3. .orderAsc(Properties.LastName)
4. .list();

 

范例5:多重条件查询

(1)获取id为cityId并且infotype为HBContant.CITYINFO_SL的数据集合:

 

 

1. public List<CityInfoDB> getSupportingList(int cityId)
2. {
3. QueryBuilder<CityInfoDB> qb = cityInfoDao.queryBuilder();
4. qb.where(qb.and(Properties.CityId.eq(cityId),Properties.InfoType.eq(HBContant.CITYINFO_SL)));
5. qb.orderAsc(Properties.Id);// 排序依据
6. return qb.list();
7. }

 

(2)获取firstname为“Joe”并且出生于1970年10月以后的所有user集合:

 

1. QueryBuilder qb = userDao.queryBuilder();
2. qb.where(Properties.FirstName.eq("Joe"),
3. qb.or(Properties.YearOfBirth.gt(1970),
4. qb.and(Properties.YearOfBirth.eq(1970), Properties.MonthOfBirth.ge(10))));
5. List youngJoes = qb.list();

 

范例6:获取某列对象

1. picJsonDao.loadByRowId(picId);

 

 

2.增添/插入、修改

插入数据更加简单,也是只要一句代码便能搞定!

 

1. public void addToPhotoTable(Photo p)
2. {
3. photoDao.insert(p);
4. }

 

插入时需要new一个新的对象,范例如下:

 

1. DevOpenHelper helper = new DaoMaster.DevOpenHelper(this"notes-db"null);
2. db = helper.getWritableDatabase();
3. daoMaster = new DaoMaster(db);
4. daoSession = daoMaster.newSession();
5. noteDao = daoSession.getNoteDao();
6. Note note = new Note(null, noteText, comment, new Date());
7. noteDao.insert(note);

 

修改更新:

1. photoDao.insertOrReplace(photo);
2. photoDao.insertInTx(photo);

 

3.删除:

(1)清空表格数据

 

1. /** 清空相册图片列表的数据 */
2. public void clearPhoto()
3. {
4. photoDao.deleteAll();
5. }

 

(2)删除某个对象

1. public void deleteCityInfo(int cityId)
2. {
3. QueryBuilder<DBCityInfo> qb = cityInfoDao.queryBuilder();
4. DeleteQuery<DBCityInfo> bd = qb.where(Properties.CityId.eq(cityId)).buildDelete();
5. bd.executeDeleteWithoutDetachingEntities();
6. }

 

参考:https://github.com/greenrobot/greenDAO/issues/34

 

由上可见,使用greenDAO进行数据库的增删改查时及其方便,而且性能极佳。

 

(三)常用方法笔记

1.在Application实现得到DaoMaster和DaoSession的方法:

 

01. private static DaoMaster daoMaster;
02. private static DaoSession daoSession;
03. /**
04. * 取得DaoMaster
05. *
06. * @param context
07. * @return
08. */
09. public static DaoMaster getDaoMaster(Context context)
10. {
11. if (daoMaster == null)
12. {
13. OpenHelper helper = new DaoMaster.DevOpenHelper(context, HBContant.DATABASE_NAME, null);
14. daoMaster = new DaoMaster(helper.getWritableDatabase());
15. }
16. return daoMaster;
17. }
18. /**
19. * 取得DaoSession
20. *
21. * @param context
22. * @return
23. */
24. public static DaoSession getDaoSession(Context context)
25. {
26. if (daoSession == null)
27. {
28. if (daoMaster == null)
29. {
30. daoMaster = getDaoMaster(context);
31. }
32. daoSession = daoMaster.newSession();
33. }
34. return daoSession;
35. }

 

2.增删改查工具类:

01. public class DBHelper
02. {
03. private static Context mContext;
04. private static DBHelper instance;
05.  
06. private CityInfoDBDao cityInfoDao;
07.  
08. private DBHelper()
09. {
10. }
11.  
12. public static DBHelper getInstance(Context context)
13. {
14. if (instance == null)
15. {
16. instance = new DBHelper();
17. if (mContext == null)
18. {
19. mContext = context;
20. }
21.  
22. // 数据库对象
23. DaoSession daoSession = HBApplication.getDaoSession(mContext);
24. instance.cityInfoDao = daoSession.getCityInfoDBDao();
25. }
26. return instance;
27. }
28.  
29. /** 添加数据 */
30. public void addToCityInfoTable(CityInfo item)
31. {
32. cityInfoDao.insert(item);
33. }
34.  
35. /** 查询 */
36. public List<EstateLoveListJson> getCityInfoList()
37. {
38. QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder();
39. return qb.list();
40. }
41.  
42. /** 查询 */
43. public List<CityInfo> getCityInfo()
44. {
45. return cityInfoDao.loadAll();// 查找图片相册
46. }
47.  
48. /** 查询 */
49. public boolean isSaved(int Id)
50. {
51. QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder();
52. qb.where(Properties.Id.eq(Id));
53. qb.buildCount().count();
54. return qb.buildCount().count() > 0 true false;// 查找收藏表
55. }
56.  
57. /** 删除 */
58. public void deleteCityInfoList(int Id)
59. {
60. QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder();
61. DeleteQuery<CityInfo> bd = qb.where(Properties.Id.eq(Id)).buildDelete();
62. bd.executeDeleteWithoutDetachingEntities();
63. }
64.  
65. /** 删除 */
66. public void clearCityInfo()
67. {
68. cityInfoDao.deleteAll();
69. }
70.  
71. /** 通过城市id查找其类型id */
72. public int getTypeId(int cityId)
73. {
74. QueryBuilder<CityInfo> qb = cityInfoDao.queryBuilder();
75. qb.where(Properties.Id.eq(cityId));
76. if (qb.list().size() > 0)
77. {
78. return qb.list().get(0).getTypeId();
79. }
80. else
81. {
82. return 0;
83. }
84. }
85.  
86. /** 多重查询 */
87. public List<CityInfo> getIphRegionList(int cityId)
88. {
89. QueryBuilder<CityInfoDB> qb = cityInfoDao.queryBuilder();
90. qb.where(qb.and(Properties.CityId.eq(cityId), Properties.InfoType.eq(HBContant.CITYINFO_IR)));
91. qb.orderAsc(Properties.Id);// 排序依据
92. return qb.list();
93. }
94. }

转载于:https://www.cnblogs.com/a-d-a-m/p/5872527.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值