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 ...
随机推荐
- 莫烦tensorflow(8)-CNN
import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data#number 1 to 10 dat ...
- spring jpa Pageable 分页之---多条件排序
Sort sort = new Sort(Direction.ASC, "sort").and(new Sort(Direction.DESC, groupField));//排序 ...
- CCF-Markdown-201703-3
这道题不存在递归结构 比如区块之间的相互嵌套 还有"[ [] ]" 链接的相互嵌套, 所以直接处理就好了 还可以 #include <bits/stdc++.h> us ...
- 求数组的相邻子数组的最大值(txt文件存储)
package mypackage; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...
- Centos7 安装Nginx 防火墙开放80端口给外网访问
Centos7的防火墙改成了firewall,不再叫iptables,开放端口的方法如下: firewall-cmd --zone=public --add-port=80/tcp --permane ...
- freebsd安装python2
第一步 cd /usr/ports/lang/python27 第二步 输入以下命令(需要联网) make make install 到此如果输入python无效 继续 第三步 cd /usr/ ...
- fixed 相对于父容器定位
当一个元素设置为 fixed 或 absolute,不设置 top, left 则会在原位置,而脱离文档流,别的元素可以存在于它之后. 而当使用 fixed 后还想相对于父容器进行定位,或者说在当前位 ...
- 第2章 Java基本语法(上): 变量与运算符
2-1 关键字与保留字 关键字(keyword) 保留字(reserved word) 2-2 标识符(Identifier) 案例 class Test{ public static void ma ...
- 自己动手开发智能聊天机器人完全指南(附python完整源码)
一.前言 人工智能时代,开发一款自己的智能问答机器人,一方面提升自己的AI能力,另一方面作为转型AI的实战练习.在此把学习过程记录下来,算是自己的笔记. 二.正文 2.1 下载pyaiml 下载pya ...
- .net updatePannel 局部刷新效果实现后,但是仍是全部刷新的修改方法
最近做了一个小例子,就是晚上都有的那种小的updatepannel的局部刷新的小例子,但是发现按照那个例子虽然能够实现label2的局部刷新,但是看上去效果确实整个页面都在刷新,这让人很头疼,所以我在 ...