您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页Android开发随笔1:好用的SqlLite封装“Active

Android开发随笔1:好用的SqlLite封装“Active

来源:二三四教育网

ActiveAndroid 真是不错,安卓Sqllite 操作的AR封装。

通用的配置、增伤查改数据,github官方有详细的资料,写几个项目中用到的点,官网没提到的。

1.统计一个表 的总数:

理所当然的认为是int cnt = new Select().from(Model.class).count() 结果不是
以为是 Model mdel = new Select("count(id)").from(Model.class).as('cnt').executeSingle(); 结果也不是

没翻源码,最后找到如下方法获取一个表的总行数

private int getCnt(Model model){
    new Select().from(Post.class).executeSingle();
    String sql = "SELECT COUNT(*) as total FROM " + model.getTableName();
    Cursor c = ActiveAndroid.getDatabase().rawQuery(sql, null);
    int cnt = 0;
    if(c!= null && c.getCount() > 0){
        c.moveToNext();
        cnt = c.getInt(0);
    }
   c.close();
    return cnt;
}

2.获取insert_id

理所当然的认为会有一个insert_id() 方法可以调用,结果没有。
在save之后,在select查询一次,获取id,也可以,不过太痛苦。

最后发现,其实很简单

model.save() 之后model的id就已经被赋值了,直接使用即可

Model model = new Model();
model.a = "a";
model.save();
Log.d("TAG" , model.getId());

3.ActiveAndroid 3.0 在安卓5.0以上,会有无法找到类的错误

java.lang.NoClassDefFoundError: android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1

解决方法有两种:

一种是在Manifest 中声明

<meta-data    android:name="AA_MODELS"    android:value="com.xxl.app.timer_jonrnal.active.Image,com.xxl.app.timer_jonrnal.active.Poi,com.xxl.app.timer_jonrnal.active.Post,com.xxl.app.timer_jonrnal.active.Voice,com.xxl.app.timer_jonrnal.active.ZipData," />

我自己试验了一下,没解决问题

第二种是升级到AA3.1,github上有个jar包提供下载,可以解决此问题。但升级AA3.1 又遇到两个问题
java.util.Date类型无法正确的存取
model.getTableName() 函数没了

不得已看下代码,解决以上两问题:

String sql = "SELECT COUNT(*) as total FROM " + Cache.getTableName(model.getClass());

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务