首页 > 其他分享 >在AndroidStudio4.1.1上使用GreenDao

在AndroidStudio4.1.1上使用GreenDao

时间:2023-08-15 14:16:49浏览次数:99  
标签:return items void GreenDao private mDao 使用 public AndroidStudio4.1

一、概述

  项目中需要用到数据库的能力,对比以及根据以往的经验,决定使用GreenDao。

二、实际操作步骤

  第一步:在项目下的.gradle文件中加入插件:classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // add plugin

   第二步:在module目录下的.gradle文件夹中进行操作

    a.引入greendao

implementation 'org.greenrobot:greendao:3.3.0' // add library

    b.在android{}大括号中加入,如下所示:ps:我项目是kotlin和java混编如果设置了targetGenDir 目录则无法生成DaoMaster和DaoSession,所以我把指定的目录注释了

greendao {
        schemaVersion 1 //数据库版本号
        daoPackage 'com.tony.demo.greendao' //填写自己的包名+文件夹test
        // 设置DaoMaster、DaoSession、Dao 包名
//        targetGenDir 'src.main.java'//设置DaoMaster、DaoSession、Dao目录
        //主要此时的这行代码如果在生成之后没有出现以下的三个类那么采取注释掉
    }

    c.引入greendao插件,这里需要注意一点:如果项目中使用了apply plugin: 'kotlin-kapt',则kapt插件的位置必须在greendao的下面,不然编译不通过

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
    id 'org.greenrobot.greendao'
}

  第三步:新建一个实体类,然后build-->rebuild项目。之后make project就可以生成DaoMaster和DaoSession了

@Entity
public class Student {
    @Id
    private String studentId;
    @Property
    private String studentName;
    @Property
    private String studentAge;public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getStudentAge() {
        return studentAge;
    }

    public void setStudentAge(String studentAge) {
        this.studentAge = studentAge;
    }
}

   第四步:进行增删改查的测试

  

/**
 * Creator: tony
 * Date: 2023/8/15
 * Description:数据库管理类
 */
public class DaoManager {
    private static final String DB_NAME = "luyinji_aic.db";//数据库名称
    private static DaoManager mDaoManager;
    private DaoMaster.DevOpenHelper mHelper;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;
    private Context context;

    private DaoManager(Context context) {
        this.context = context;
    }

    /**
     * 使用单例模式获得操作数据库的对象
     *
     * @return
     */
    public static DaoManager getInstance() {
        if (mDaoManager == null) {
            synchronized (DaoManager.class) {
                if (mDaoManager == null) {
                    mDaoManager = new DaoManager(ContextUtils.INSTANCE.getApplicationContext());
                }
            }
        }
        return mDaoManager;
    }

    /**
     * 获取DaoSession
     *
     * @return
     */
    public synchronized DaoSession getDaoSession() {
        if (null == mDaoSession) {
            mDaoSession = getDaoMaster().newSession();
        }
        return mDaoSession;
    }

    /**
     * 设置debug模式开启或关闭,默认关闭
     *
     * @param flag
     */
    public void setDebug(boolean flag) {
        QueryBuilder.LOG_SQL = flag;
        QueryBuilder.LOG_VALUES = flag;
    }


    /**
     * 关闭数据库
     */
    public synchronized void closeDataBase() {
        closeHelper();
        closeDaoSession();
    }

    /**
     * 判断数据库是否存在,如果不存在则创建
     *
     * @return
     */
    private DaoMaster getDaoMaster() {
        if (null == mDaoMaster) {
            mHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
            mDaoMaster = new DaoMaster(mHelper.getWritableDb());
        }
        return mDaoMaster;
    }

    private void closeDaoSession() {
        if (null != mDaoSession) {
            mDaoSession.clear();
            mDaoSession = null;
        }
    }

    private void closeHelper() {
        if (mHelper != null) {
            mHelper.close();
            mHelper = null;
        }
    }
}
/**
 * Creator: tony
 * Date: 2023/8/15
 * Description:数据库帮助类
 */
public class BaseBeanManager<T, K> {
    private AbstractDao<T, K> mDao;


    public BaseBeanManager(AbstractDao dao) {
        mDao = dao;
    }


    public void save(T item) {
        mDao.insert(item);
    }

    public void save(T... items) {
        mDao.insertInTx(items);
    }

    public void save(List<T> items) {
        mDao.insertInTx(items);
    }

    public void saveOrUpdate(T item) {
        mDao.insertOrReplace(item);
    }

    public void saveOrUpdate(T... items) {
        mDao.insertOrReplaceInTx(items);
    }

    public void saveOrUpdate(List<T> items) {
        mDao.insertOrReplaceInTx(items);
    }

    public void deleteByKey(K key) {
        mDao.deleteByKey(key);
    }

    public void delete(T item) {
        mDao.delete(item);
    }

    public void delete(T... items) {
        mDao.deleteInTx(items);
    }

    public void delete(List<T> items) {
        mDao.deleteInTx(items);
    }

    public void deleteAll() {
        mDao.deleteAll();
    }


    public void update(T item) {
        mDao.update(item);
    }

    public void update(T... items) {
        mDao.updateInTx(items);
    }

    public void update(List<T> items) {
        mDao.updateInTx(items);
    }

    public T query(K key) {
        return mDao.load(key);
    }

    public List<T> queryAll() {
        return mDao.loadAll();
    }

    public List<T> query(String where, String... params) {

        return mDao.queryRaw(where, params);
    }

    public QueryBuilder<T> queryBuilder() {

        return mDao.queryBuilder();
    }

    public long count() {
        return mDao.count();
    }

    public void refresh(T item) {
        mDao.refresh(item);

    }

    public void detach(T item) {
        mDao.detach(item);
    }
}
public class StudentManager extends BaseBeanManager<Student, Long> {
    public StudentManager(AbstractDao dao) {
        super(dao);
    }
}
/**
 * green到数据库测试
 */
class GreenDaoTestActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_green_dao_test)
        initView()
    }

    private fun initView() {
        btnSave.setOnClickListener {
            saveStudent()
        }
        btnDelete.setOnClickListener {
            deleteStudent()
        }
        btnUpdate.setOnClickListener {
            updateStudent()
        }

        btnQuery.setOnClickListener {
            queryStudent()
        }
    }

    private fun saveStudent() {
        ManagerFactory.getInstance().studentManager.saveOrUpdate(Student("1", "杨洛峋", "5"))
    }

    private fun deleteStudent() {
        ManagerFactory.getInstance().studentManager.delete(Student("1","杨洛峋","5"))
    }

    private fun updateStudent() {
        ManagerFactory.getInstance().studentManager.update(Student("1", "杨洛峋小宝宝", "不到5岁"))
    }

    private fun queryStudent() {
        var list = ManagerFactory.getInstance().studentManager.queryAll()
        if (list != null && list.isNotEmpty()) {
            tvDaoContent.text = "${list[0].studentName}"
        } else {
            tvDaoContent.text = "数据库中 没有数据了"
        }

    }
}

 

三、小结

  以上是做的一个简单的测试。增删改查是没什么问题。要想在项目中愉快的使用,还需要进一步的做一下封装

标签:return,items,void,GreenDao,private,mDao,使用,public,AndroidStudio4.1
From: https://www.cnblogs.com/tony-yang-flutter/p/17631119.html

相关文章

  • 编译greenDao的时候出现KaptExecution:java.lang.reflect.InvocationTargetException
    一、概述在编译greendao的时候出现了以下异常。Executionfailedfortask':common_base:kaptDebugKotlin'.>Afailureoccurredwhileexecutingorg.jetbrains.kotlin.gradle.internal.KaptExecution>java.lang.reflect.InvocationTargetException(noerrormes......
  • C# Winform 使用 BarTender打印条码
    -1.使用软件BarTender设计打印模板贴一个入门级使用教程:https://blog.csdn.net/ononeway/article/details/119912602我在项目中使用的是txt文本格式保存的字段以及数据,第一行是绑定数据的字段,第二行是字段对应的数据。点击查看代码"ITEM_CODE","ITEM_DESC","UOM_NAME","V......
  • Django templatetags使用
     webapp文件夹下创建templatetags文件夹templates文件夹下创建tags文件夹 templatetags文件夹下创建menu.pyfromdjango.templateimportLibraryregister=Library()@register.inclusion_tag("tags/nb_menu.html")defnb_menu(request):print(555,request.nv_login......
  • Git使用问题记录
    问题一fatal:unabletoaccess‘https://…git/’:SSLcertificateproblem:selfsignedcertificateincertificatechain打开GitBash运行如下命令exportGIT_SSL_NO_VERIFY=truegitconfig--globalhttp.sslVerify"false"或者在windows的命令行中,进入到git命令所......
  • Ceph RBD的使用笔记
    ceph的内容太多了,单独写一篇文章记录自己的一些RBD的学习笔记,其实简书和其他博客上已经记录的非常全面了,但是因为出处都比较分散,所以还是自己把自己的实验记录一下便于以后学习的查阅。也感谢各位大佬的无私分享。 1.RBD池的创建和enable[cephadmin@ceph-node~]$cephosdp......
  • linux环境下监控docker进程运行情况,使用钉钉群机器人报警异常服务
    背景:在linux环境下,很多服务我们都使用docker来跑,很是方便,容器服务独立,配置独立,数据独立等等,但是有个问题,就是如果某个服务异常了,暂停了,停止了,一直重启中,我们要怎么及时的知道是哪个服务,并进行处理,保证业务正常运行。本文主要介绍使用docker服务自带的一些命令来实现一个基本的监......
  • Linux系统之top命令的基本使用
    (Linux系统之top命令的基本使用)一、top命令介绍top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。二、检查本地环境1.检查操作系统版本检查本地操作系统版本[root@j......
  • 协程上下文的设计与使用
    协程上下文的设计与使用协程是一种轻量级的并发编程模式,它可以让我们用同步的方式写出异步的代码,提高代码的可读性和性能。在协程框架中,有一个非常重要的概念,就是协程上下文(CoroutineContext)。协程上下文可以看作是一组协程运行所需的环境变量,比如调度器、异常处理器、协程名等。在......
  • 【C++STL基础入门】string类的基础使用
    @TOC前言本系列文章使用VS2022,C++20版本STL(StandardTemplateLibrary)是C++的一个强大工具集,其中的string类是STL中一个常用的容器。本文将介绍string类的基本使用方法。一、STL使用概述在STL中,我们的每一个容器/string字符串等都是使用面向对象技术来实现的,我们只需要调用里面的函......
  • 使用FFmpeg进行yuv420转rgba
    讲解一下将获取到视频数据,进行rgb转码,并且进行相应的缩放操作//存放解码过后的数据unsignedchar*decode_data;intdecode_size=0;/***解码AVFrame中的yuv420数据并且转换为rgba数据**@paramframe需要解码的帧结构*@paramsrc_width需要转换的帧宽度*......