Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画

简介: Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return “UserInfo{” +
“id=” + id +
“, userName='” + userName + ‘’’ +
“, phoneNumber='” + phoneNumber + ‘’’ +
“, address='” + address + ‘’’ +
‘}’;
}
}
2.2. 查看UserInfoDAO,DaoMaster及DaoSession

上述操作结束之后,在工程目录下,GreenDAO的生成目录中可以找到相应的数据库操作类,我实体类UserInfo的操作类名称为UserInfoDAO,同时也会自动生成DaoMaster和DaoSession

可以看到生成了三个文件,一个是实体类的操作类,还有DaoMaster,DaoSession等类。

我们先看看DaoMaster类,DaoMaster类主要定义了几个函数

(1)createAllTables、dropAllTables
/** Creates underlying database table using DAOs. */
public static void createAllTables(Database db, boolean ifNotExists) {
UserInfoDao.createTable(db, ifNotExists);
}
/** Drops underlying database table using DAOs. */
public static void dropAllTables(Database db, boolean ifExists) {
UserInfoDao.dropTable(db, ifExists);
}
这两个方法表明了DaoMaster的两个作用,创建和删除所有表。
(2)newSession
public DaoSession newSession() {
return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
}
public DaoSession newSession(IdentityScopeType type) {
return new DaoSession(db, type, daoConfigMap);
}
这两个类可以创建Session绘画,有两种重载形式,一种可以让我们自定义类型。
(3)构造函数
public DaoMaster(SQLiteDatabase db) {
this(new StandardDatabase(db));
}
public DaoMaster(Database db) {
super(db, SCHEMA_VERSION);
registerDaoClass(UserInfoDao.class);
}
两个重载形式,一个时生成一个数据库,另一个则是注册Config,查看一下registerDaoClass类则会发现,daoConfigMap是一个Map结构
protected final Map>, DaoConfig> daoConfigMap;
protected void registerDaoClass(Class> daoClass) {
DaoConfig daoConfig = new DaoConfig(db, daoClass);
daoConfigMap.put(daoClass, daoConfig);
}
通过传进来的UserInfoDao.class作为key,对这个daoConfig进行绑定操作。
而进入到DaoConfig类中,查看DaoConfig的源码时,可以看到注释中的介绍
/**
• Internal class used by greenDAO. DaoConfig stores essential data for DAOs, and is hold by AbstractDaoMaster. This
• class will retrieve the required information from the DAO classes.
*/
DaoConfig存储DAO的基本数据,并由AbstractDaoMaster所持有。 该类将从DAO类中检索所需的信息。即将DAO类作为key来检索信息
而DaoSession类则主要是用来操作DAO对象的,它有三个方法
(1)构造函数
public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
daoConfigMap) {
super(db);
userInfoDaoConfig = daoConfigMap.get(UserInfoDao.class).clone();
userInfoDaoConfig.initIdentityScope(type);
userInfoDao = new UserInfoDao(userInfoDaoConfig, this);
registerDao(UserInfo.class, userInfoDao);
}
从代码中我们可以看到,构造函数做了这么几件事儿
1.取出map中对应DAO的daoConfig
2.初始化缓存类型
3.根据配置可以得到一个DAO对象
4.将DAO对象进行注册,也是通过Map进行管理
(2)getUserInfoDao方法
public UserInfoDao getUserInfoDao() {
return userInfoDao;
}
可返回dao对象,说明可以返回dao对象并对其进行具体的操作了。
(3)clear函数
public void clear() {
userInfoDaoConfig.clearIdentityScope();
}
clear函数就是清楚缓存的函数, clearIdentityScope()
2.3编写DaoManage类

其实,上面操作过后,可以直接进行数据库的使用了,但是这里仍然编写了一个DaoManage类,希望在使用过程中更方便的进行初始化工作

主要内容就是进行各种变量的初始化之后,获得数据库,获取DaoSession对象好对表进行数据操作。

代码如下:

public class DaoManage {
private Context mContext;
//数据库的名称
private static final String DB_NAME = “user.db”;
//多线程中要被共享的要用volatile修饰,Greendao管理类
private volatile static DaoManage mInstance;
//DAOMaster 保存数据库对象
private static DaoMaster mDaoMaster;
//Helper类
private static DaoMaster.DevOpenHelper mHelper;
//Dao对象中的增删改查的对象
private static DaoSession mDaoSession;
private DaoManage(){
}
//使用单例模式来获取GreenDao管理类的对象,即操作数据库的对象
public static DaoManage getInstance(){
if (mInstance == null){
synchronized (DaoManage.class){
if(mInstance == null){
mInstance = new DaoManage();
}
}
}
return mInstance;
}
//初始化上下文
public void init(Context context){
this.mContext = context;
}
//创建(若没有)并获取数据库
public DaoMaster getDaoMaster(){
if(mDaoMaster == null){
//创建一个数据库
mHelper = new DaoMaster.DevOpenHelper(mContext, DB_NAME, null);
mDaoMaster = new DaoMaster(mHelper.getWritableDatabase());
}
return mDaoMaster;
}
//获取DaoSession对象,完成增删改查操作
public DaoSession getDaoSession(){
if(null == mDaoSession){
//若表为空,new一个
if(null == mDaoMaster){
//若数据库为空,则创建数据库
mDaoMaster = getDaoMaster();
}
mDaoSession = mDaoMaster.newSession();
}
return mDaoSession;
}
//关闭连接
public void closeConnection(){
if(mHelper != null){
mHelper.close();
mHelper = null;
}
if(mDaoSession != null){
mDaoSession.clear();
mDaoSession = null;
}
}
}

三、GreenDao使用(2)

3.1. 编写DBHelper类

实际上,GreenDao的数据库操作已经十分简便,我们是可以直接进行使用的,但是为了更加整洁的使用,我还是将增删改查的操作进行了封装,写在了DBHelper类中

(0)加入UserInfoDao对象属性并初始化

private UserInfoDao userInfoDao = DaoManage.getInstance().getDaoSession().getUserInfoDao();

(1)按id查找数据
//查找(按id查找)
public UserInfo queryById(Long id){
List list = userInfoDao.queryBuilder().where(UserInfoDao.Properties.Id.eq(id)).build().list();
UserInfo userInfo = list.isEmpty() ? null : list.get(0);
return userInfo;
}
(2)查找全部
//查找全部
public List queryAll(){
return userInfoDao.queryBuilder().build().list();
}

查询还可以批量查询,多条件查询,模糊搜索等等内容,由于太多,就不全部列出来了,可以查阅相关文档按照需要进行使用。

(3)增
//增加
public void add(UserInfo userInfo){
if (queryById(userInfo.getId()) == null){
userInfoDao.insert(userInfo);
}else{
userInfoDao.update(userInfo);
}
}
//批量增加
public void add(List userInfoList){
userInfoDao.insertInTx(userInfoList);
}
(4)删
//删除一个对象
public void delete(UserInfo userInfo){
userInfoDao.delete(userInfo);
}
//删除一个列表的对象
public void deleteByList(List userInfoList){
userInfoDao.deleteInTx(userInfoList);
}
//按主键删除
public void delteByKey(long key){
userInfoDao.deleteByKey(key);
}
//按主键列表删除
public void deleteByKeyList(List idList){
userInfoDao.deleteByKeyInTx(idList);
}
//删除所有
public void deleteAll(){
userInfoDao.deleteAll();
}
(5)改
//修改
public boolean update(UserInfo userInfo){
UserInfo findUser = userInfoDao.queryBuilder().where(UserInfoDao.Properties.Id.eq(userInfo)).build().unique();
if (findUser != null){
userInfoDao.update(userInfo);
return true;
}else{
return false;
}
}
3.2.在MainActivity中进行使用

在Android6.0之后,我们需要在代码中先对权限进行检查,即检查有没有文件的读写权限,如果没有权限,要申请权限,所以在onCreate()函数中,在前面要先加入一段代码:

//检查当前权限,如果没有,申请request,
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
//申请一个或多个权限
ActivityCompat.requestPermissions(MainActivity.this, new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
}, 100);
}

在类中添加DBHelper类的成员对象,并进行初始化

DBHelper dbHelper = new DBHelper();


相关文章
|
10月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
426 64
|
10月前
|
缓存 Android开发 开发者
Flutter环境配置完成后,如何在Android设备上运行Flutter应用程序?
Flutter环境配置完成后,如何在Android设备上运行Flutter应用程序?
1822 62
|
9月前
|
XML 数据库 Android开发
Android数据库的使用(增删改查)
本文介绍了一个简单的数据库操作Demo,包含创建数据库、增删改查功能。通过5个按钮分别实现创建数据库、插入数据、删除数据、更新数据和查询数据的操作。代码结构清晰,适合初学者学习Android SQLite数据库基础操作。
273 5
|
9月前
|
数据库 Android开发
Android外部数据库的引用
简介:本文介绍了在Android项目中引用外部数据库的方法。首先,将现成的数据库文件放入项目的`assets`文件夹中(需手动创建)。其次,在APP引导界面通过代码将数据库拷贝至App目录下,确保数据库可用。最后,对数据库进行增删改查等操作。关键步骤包括判断数据库是否存在、使用`AssetManager`读取数据库文件并写入App私有目录,实现外部数据库的顺利集成与使用。
117 2
|
9月前
|
数据库 Android开发 开发者
Android常用的room增删改查语句(外部数据库)
本文分享了将一个原生数据库驱动的单词APP重构为使用Room库的过程及遇到的问题,重点解决了Room中增删改查的常用语句实现。文章通过具体示例(以“forget”表为例),详细展示了如何定义实体类、Dao接口、Database类以及Repository和ViewModel的设计与实现。同时,提供了插入、删除、更新和查询数据的代码示例,包括模糊查询、分页加载等功能。此外,针对外部数据库导入问题,作者建议可通过公众号“计蒙不吃鱼”获取更多支持。此内容适合有一定Room基础的开发者深入学习。
285 0
Android常用的room增删改查语句(外部数据库)
|
12月前
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
356 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
796 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
12月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
1668 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
12月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
383 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。