Android GreenDao基本使用

项目中一些地方用到了数据库操作,在此总结一下
1.先记录一个查看数据库的小工具
https://github.com/amitshekhariitbhu/Android-Debug-Database
之前查看数据库都是在data/data目录下把数据库导出来然后通过SQLite可视化工具查看表中的内容,这样可能会就比较麻烦。这个工具可以直接访问浏览器查看表的内容,相当于把自己的手机当作服务器然后访问,查看的时候直接访问手机上的ip地址:8080即可。具体的使用看文档的说明就行。
2.GreenDao存储自定义类型数据
在项目里遇到两种
1.存储枚举类型的
2.存储自定义类型的
这两种都可以转换成我们需要的类型存储到数据库中。greendao只支持boolean, Boolean int, Integer short, Short long, Long float, Float double, Double byte, Byte char, Character byte[] String Date 这几种基本类型。我们可以看下https://docs.objectbox.io/advanced/custom-types只要是我们自定义的类型最后存储到数据库中都只能是这些类型。对于枚举我都转换成了String类型,如果需要转换成int类型可以参考http://greenrobot.org/greendao/documentation/custom-types/ 。然后我们来实现PropertyConverter接口,这个接口需要传入两个泛型,第一个是实体的类型,第二个是数据库中的类型。然后实现里面的两个方法convertToEntityProperty和convertToDatabaseValue来转换成对应的类型。


@Entity
public  class Message    {
    @Id
    private String uid;
    //枚举类型
    @Convert(converter = ConversationTypeConverter.class, columnType = String.class)
    private ConversationType conversationType;
    //自定义类型
    @Convert(converter = MsgBodyConverter.class, columnType = String.class)
    private MsgBody body;

	public enum ConversationType {
	     DEFAULT ,PRIVATE , GROUP ;  
	}

	public  class   MsgBody {
	    private String msg;
	    private String extra;
	}
  
    public static class ConversationTypeConverter implements  PropertyConverter<ConversationType, Integer> {
        //将String值转换成ConversationType 值
        @Override
        public ConversationType convertToEntityProperty(Integer databaseValue) {
            if (databaseValue == null) {
                return null;
            }
            return  ConversationType.valueOf(databaseValue);
        }
        //将ConversationType 值转换成String值
        @Override
        public Integer convertToDatabaseValue(ConversationType entityProperty) {
            return entityProperty.name();
        }
    }
    
	
   public   static class MsgBodyConverter implements PropertyConverter<MsgBody   , String> {
      @Override
      public MsgBody convertToEntityProperty(String databaseValue) {
           if (databaseValue == null) {
               return null;
           }
           return new Gson().fromJson(databaseValue, MsgBody .class);
       }
       @Override
       public String convertToDatabaseValue(MsgBody entityProperty) {
           if (entityProperty == null) {
               return null;
           }
           return new Gson().toJson(entityProperty);
       }
   }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GreenDAO 是一个基于 SQLite 的 Android ORM 框架,它提供了一种简单方便的方式来将 Java 对象映射到 SQLite 数据库中。 关于 GreenDAO 的 join 操作,它可以通过 QueryBuilder 类实现。具体步骤如下: 1. 创建两个实体类,例如 A 和 B,它们之间可能存在关联关系。 2. 在 A 实体类中定义一个 ToOne 类型的关联属性,表示 A 对象关联到一个 B 对象。例如: ``` @Entity public class A { @Id private Long id; private String name; @ToOne(joinProperty = "bId") private B b; private Long bId; // ... } ``` 其中,`@ToOne` 注解表示关联属性是一个 ToOne 类型,`joinProperty` 属性指定了关联的外键属性名称。 3. 在 B 实体类中定义一个 ToMany 类型的关联属性,表示 B 对象关联到多个 A 对象。例如: ``` @Entity public class B { @Id private Long id; private String desc; @ToMany(referencedJoinProperty = "bId") private List<A> aList; // ... } ``` 其中,`@ToMany` 注解表示关联属性是一个 ToMany 类型,`referencedJoinProperty` 属性指定了关联的外键属性名称。 4. 根据需要创建 A 和 B 对象,并设置它们之间的关联关系。 5. 使用 QueryBuilder 类查询 A 和 B 对象的关联数据。例如: ``` QueryBuilder<A> aQueryBuilder = aDao.queryBuilder(); QueryBuilder<B> bQueryBuilder = bDao.queryBuilder(); List<A> aList = aQueryBuilder.join(B.class, ADao.Properties.BId) .where(BDao.Properties.Desc.eq("xxx")) .list(); ``` 其中,`join` 方法表示要进行关联查询,`B.class` 表示关联的实体类,`ADao.Properties.BId` 表示 A 实体类中的外键属性,`.where` 方法表示要添加查询条件,`BDao.Properties.Desc.eq("xxx")` 表示查询 B 实体类中 desc 属性为 "xxx" 的数据,最后调用 `list` 方法获取查询结果。 以上就是 GreenDAO 中 join 操作的基本步骤。需要注意的是,在进行关联查询时,建议使用 QueryBuilder 类来构建查询语句,以便更加方便地添加查询条件和排序规则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值