Android GreenDao 在组件化项目中的一个问题 - 2018年7月5日21:15:14
组件化项目使用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(, String.class, "id", true, "ID");
public final static Property TaskId = new Property(, String.class, "taskId", false, "TASK_ID");
public final static Property TaskNum = new Property(, String.class, "taskNum", false, "TASK_NUM");
public final static Property Zcfdd = new Property(, 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 进行查询时出现数据异常的问题!!!
Android GreenDao 在组件化项目中的一个问题 - 2018年7月5日21:15:14的更多相关文章
- 在WePY中实现了小程序的组件化开发,组件的所有业务与功能在组件本身实现,组件与组件之间彼此隔离,上述例子在WePY的组件化开发过程中,A组件只会影响到A所绑定的myclick
wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/?id=%e5%be%ae%e4%bf%a1%e5%b0%8f%e7 ...
- AE创建组件失败,项目中已存在对esri.arcgis.***的引用
AE创建组件失败,项目中已存在对esri.arcgis.***的引用 解决办法:在解决方案资源管理器的引用中把错误提示中的引用删掉,再创建组件就没问题了.
- Android构建项目时出现的小bug们(2018年5月19日19:31:20)
问题详情 Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > Conflict with dependency ...
- 【Filter 不登陆无法访问】web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面的功能
在web项目中写一个过滤器实现用户不登陆,直接给链接,无法进入页面,而重定向到登陆界面的功能. 项目是用springMVC+spring+hibernate实现 (和这个没有多大关系) 第一步: 首先 ...
- Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作
Entity Framework 的小实例:在项目中添加一个实体类,并做插入操作 1>. 创建一个控制台程序2>. 添加一个 ADO.NET实体数据模型,选择对应的数据库与表(Studen ...
- 项目中的一个分页功能pagination
项目中的一个分页功能pagination <script> //总页数 ; ; //分页总数量 $(function () { // $("#pagination"). ...
- 如何在 GitHub 的项目中创建一个分支呢?
如何在 GitHub 的项目中创建一个分支呢? 其实很简单啦,直接点击 Branch,然后在弹出的文本框中添加自己的 Branch Name 然后点击蓝色的Create branch就可以了,这样一来 ...
- oracle性能优化(项目中的一个sql优化的简单记录)
在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性.其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了.本文主要记录在实际项目中,一个 ...
- Java项目中每一个类都可以有一个main方法
Java项目中每一个类都可以有一个main方法,但只有一个main方法会被执行,其他main方法可以对类进行单元测试. public class StaticTest { public static ...
随机推荐
- 5.移动终端App测试点归纳
以下所有测试最后必须在真机上完整的执行. 1 安装.卸载测试 1.1 在真机上.第三方软件(xy苹果助手.91.安卓助手)的安装与卸载 1.2 安装在手机卡上 或 SD卡上 (不同的IOS和安卓版本) ...
- 通过GUID确保winform运行唯一实例
通过程序生成的GUIDwinform唯一实例 using System.Threading;bool createdNew; Guid ownGUID = new Guid(((GuidAttribu ...
- 421. Maximum XOR of Two Numbers in an Array
这题要求On时间复杂度完成, 第一次做事没什么思路的, 答案网上有不贴了, 总结下这类题的思路. 不局限于这个题, 凡是对于这种给一个 数组, 求出 xxx 最大值的办法, 可能上来默认就是dp, ...
- 学习笔记TF029:实现进阶卷积网络
经典数据集CIFAR-10,60000张32x32彩色图像,训练集50000张,测试集10000张.标注10类,每类图片6000张.airplance.automobile.bird.cat.deer ...
- github二次认证接收短信的问题
这两天登陆github都被提示说我账号的密码已经被归类,提醒我修改密码. 改密码的时候发现GitHub有个二次认证的功能,分别是app和sms短信认证.app这里就不讲了,我们讲一下github的短信 ...
- Google - Reconstruct To Chain
/* 4. 给你一串input,比如: A -> B B -> C X -> Y Z -> X . . . 然后让你设计一个data structure来存这些关系,最后读完了 ...
- Docker的网络类型和固定IP设置
Docker的网络机制 Docker的网络有三种类型(driver): bridge, host 和 null. birdge: 就如同桥接的switch/hub, 使用bridge网络的contai ...
- Java_IO异常处理方式_入门小笔记
package IO; import java.io.FileWriter; import java.io.IOException; /** * IO异常处理方式 */ class FileWrite ...
- java_初始化器
1. 执行的顺序 package java20180129_1; public class Demo { // instance variable initializer 实例变量初始化器 Strin ...
- 一 Struts框架(上)
Struts2 是基于MVC的WEB框架 经过六年多的发展,Struts1已经成为了一个高度成熟的框架,不管是稳定性还是可靠性都得到了广泛的证明.市场占有率超过20%,拥有丰富的开发人群,几乎已经成为 ...