https://blog.csdn.net/qq_35956194/article/details/79167897
@unique 唯一约束(这个会默认创建索引)
@NameInDb:有的时候数据库中的字段跟你的对象字段不匹配的时候,可以使用此注解。
DaoMaster:用于创建数据库以及获取DaoSession
DaoSession:用于获取各个表对应的Dao类,可以缓存数据.
这个没有具体用过
DatabaseManager.getInstance().getSession().clear();//清楚 session 的所有缓存
DatabaseManager.getInstance().getSession().getStudentDao().deleteAll(); // 清除 StudentDao的缓存
各个表对应的Dao:提供了对表进行增删改查的方法,以及表的各个字段,表名等属性.
任何修改都应该对数据库升级.
数据库升级: build.gradle中数据库版本增高.
如果不操作,数据库之前保存的数据都会消失.默认是删除所有表,再创建所有表,清除所有数据.
如果用三方,需要在MySQLiteOpenHelper中指定dao的class.
insert: 如果主键已存在,再插入主键一致的数据时,会崩溃.
insertOrReplace: 如果主键已存在,再插入主键一致的数据时,会更新数据.
delete 也是基于deleteByKey,只不过是先找到key,然后在调用deleteByKey
设置主键为自动增长.如果之前表中最后一条数据主键为10,主键列表为1,2,3,4,5,6,7,8,9,10,将这条数据删除之后,再新增一条数据,那么新增的数据的id是11,而不是10.那么数据id是1,2,3,4,5,6,7,8,9,11,缺少10.,也就是说主键会一直比增长,不管你曾经是否删除过.
如果不添加(autoincrement = true),那么索引一直是连续的,即使中途删除过元素.
如果没有设置主键,那么实体bean不能更新,更新时会提示
does not have a single-column primary key
1,如果表单有唯一id,那么这个id可以设置成主键.
2,如果这个表单没有id,那么需要我们添加一个id,@Id,如果需要自增,可以添加(autoincrement = true),同时id应该使用Long,大写的L.那么在创建bean对象的时候,主键应该设置null,设置成null才能自动增长,如果设置成一个固定的值,那么这个id只能是那个固定的值.
得到所有数据
loadAll()
unique()返回唯一一条数据
unique()方法可以用来返回唯一一条数据, 如果只存在一条,那么正常返回,如果存在多条,会崩溃.
1,如果某个字段添加注释@id,或者@unique,表示它是唯一的,因此在查询的时候可以利用unique()方法来获取这唯一一行的数据.
2,如果字段不是唯一的,但是采用了unique方法来获取,如果查询到的列表中有两条数据,那么会崩溃.并提示Expected unique result, but count was 2
.
与条件查询
List jin3 = studentDao.queryBuilder().where(StudentDao.Properties.Age.eq("1"), StudentDao.Properties.Name.eq("jin1")).list();
或条件查询
List jin3 = studentDao.queryBuilder().whereOr(StudentDao.Properties.Age.eq("1"), StudentDao.Properties.Name.eq("jin3")).list();
复杂查询,与条件与或条件同时存在
或和与需要用()分隔开来
List students = studentDao.queryRawCreate(" where ( id = ? and name = ? ) or ( id = ? )", "0", "jin0", "1").list();