上篇文章写了GreenDao的基本使用,后来考虑了一下,发现还有封装的余地。
所以我把初始化数据库的操作写到了基类中,这样就更加方便了,
首先看下上篇的userdao要想得到dao,需要以下的几个基本步骤

 mHelper = new DaoMaster.DevOpenHelper(this, “swt-db”, null);db = mHelper.getWritableDatabase();mDaoMaster = new DaoMaster(db);mDaoSession = mDaoMaster.newSession();dao=mDaoSession.getUserDao();

首先找到这里面的俩个变量”swt-db”,userdao,一个是数据库名字,一个是user表的操作对象,所以可以这样改

    mHelper = new DaoMaster.DevOpenHelper(this, getDbName(), null);db = mHelper.getWritableDatabase();mDaoMaster = new DaoMaster(db);mDaoSession = mDaoMaster.newSession();getDao();protected abstract void getDao();protected abstract String getDbName();

将需要动态改变的对外暴露一个方法,让子类去实现它,所以我上个列子的子类是这样的

    @Overrideprotected void getDao() {dao = mDaoSession.getUserDao();}@Overrideprotected String getDbName() {return "swt-db";}

需要什么数据库名字和对象我就返回过去就好啦,然后突然我想到一个问题,mDaoSession是不是能得到所有的表的对象呢?我急忙看下了DaoSession的源码,我发现

 public UserDao getUserDao() {return userDao;}

它有这个方法,于是我测试了一下,我新建了一个people表,make了一下项目然后我发现在DaoSession的代码中出现了这个

  public PeoPleDao getPeoPleDao() {return peoPleDao;}

很好,people表的控制对象也是生成在这里面的,那就可以通过mDaoSession得到所有的表的对象,这样是OK的。

于是我们得到了表的dao对象,于是可以开心的操作数据库啦

 switch (v.getId()) {case R.id.add:if (getEtName() != null && EtAge.getText().toString() != null && getSex() != null) {User insertUser = new User(null, getEtName(), getAge(), getSex());dao.insert(insertUser);}break;case R.id.delete:dao.deleteByKey(getId());break;case R.id.update:User UpdateUser = new User(null, getEtName(), getAge(), getSex());dao.update(UpdateUser);break;case R.id.query:dao.loadAll();//动态展示的 所以暂时不需要这个东西break;

我在网上看到很多的人都对这个进行过简单的封装,不过都是封装在了application中,我觉得这样不是特别好,首先在真正的开发中,并不是每个模块都是需要去操作数据库,所以我觉得将它封装在一个baseactivity或者fragment中,作为一个数据库的activity基类,需要用到的时候就继承它,或者把他集成进去,application是APP每次启动都会去运行的,不应该放太多的初始化操作,就像有很多的项目中,支付类的SDK初始化都是采用懒加载的。

接下来贴出主要的代码,文末有代码下载地址

package com.anlaiye.swt.greendaodemo;import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;import com.anlaiye.swt.greendaodemo.base.BaseActivity;
import com.anye.greendao.gen.UserDao;import java.util.ArrayList;
import java.util.List;public class MainActivity extends BaseActivity implements View.OnClickListener {//    private Button Add, Delect, Update, Query;private EditText EtId, EtName, EtAge, EtSex;private RecyclerView mRecyclerView;private List<User> mUserList = new ArrayList<>();private RvAdapter adapter;private UserDao dao;@Overrideprotected void initview() {findViewById(R.id.add).setOnClickListener(this);findViewById(R.id.delete).setOnClickListener(this);findViewById(R.id.update).setOnClickListener(this);findViewById(R.id.query).setOnClickListener(this);EtId = (EditText) findViewById(R.id.et_id);EtName = (EditText) findViewById(R.id.et_name);EtAge = (EditText) findViewById(R.id.et_age);EtSex = (EditText) findViewById(R.id.et_sex);mRecyclerView = (RecyclerView) findViewById(R.id.rv_result);initRv();}@Overrideprotected int getLayoutId() {return R.layout.activity_main;}@Overrideprotected void getDao() {dao = mDaoSession.getUserDao();}@Overrideprotected String getDbName() {return "swt-db";}public void initRv() {mUserList = dao.loadAll();adapter = new RvAdapter(this, mUserList, R.layout.rv_item);mRecyclerView.setAdapter(adapter);mRecyclerView.setLayoutManager(new LinearLayoutManager(this));}public Long getId() {Long id = Long.parseLong(EtId.getText().toString());return id;}public String getEtName() {String name = EtName.getText().toString();return name;}public int getAge() {if (EtAge.getText().toString() != null && !TextUtils.isEmpty(EtAge.getText().toString())) {int age = Integer.parseInt(EtAge.getText().toString());return age;}return 0;}public String getSex() {String sex = EtSex.getText().toString();return sex;}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.add:if (getEtName() != null && EtAge.getText().toString() != null && getSex() != null) {User insertUser = new User(null, getEtName(), getAge(), getSex());dao.insert(insertUser);}break;case R.id.delete:dao.deleteByKey(getId());break;case R.id.update:User UpdateUser = new User(null, getEtName(), getAge(), getSex());dao.update(UpdateUser);break;case R.id.query:dao.loadAll();//动态展示的 所以暂时不需要这个东西break;}initRv();resetET();}private void resetET() {EtAge.setText("");EtName.setText("");EtSex.setText("");EtId.setText("");}
}

基类

package com.anlaiye.swt.greendaodemo.base;import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;import com.anye.greendao.gen.DaoMaster;
import com.anye.greendao.gen.DaoSession;/*** 介绍:这里写介绍* 作者:sweet* 邮箱:sunwentao@imcoming.cn* 时间: 2017/3/20*/public abstract class BaseActivity extends AppCompatActivity {DaoMaster.DevOpenHelper mHelper;SQLiteDatabase db;DaoMaster mDaoMaster;public DaoSession mDaoSession;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(getLayoutId());openDb();initview();}protected abstract void initview();protected abstract int getLayoutId();private void openDb() {mHelper = new DaoMaster.DevOpenHelper(this, getDbName(), null);db = mHelper.getWritableDatabase();mDaoMaster = new DaoMaster(db);mDaoSession = mDaoMaster.newSession();getDao();}protected abstract void getDao();protected abstract String getDbName();}

这里只简单的写了个实现,可以作为入门用,大神可以无视我。。。。入门人员可以继续扩展。
代码下载地址http://download.csdn.net/detail/qq_15527709/9786940

一行代码操作数据库GreenDao相关推荐

  1. 如何用一行C++代码读写数据库

    这篇文章要表达的并非数据库相关的知识,而是如何使用DBIOWrapper. DBIOWrapper是一个工作在Windows下.对ODBC式数据访问进行了小型封装的库.其设计目标是提供极简的数据访问模 ...

  2. JDBC:标准接口API ,即同一套Java代码操作不同的关系型数据库

    JDBC 今日目标 掌握JDBC的的CRUD 理解JDBC中各个对象的作用 掌握Druid的使用 1,JDBC概述 JDBC:通过java语言操作数据库中的数据. 1.1 JDBC概念 JDBC 就是 ...

  3. 利用PyMySQL模块操作数据库

    连接到数据库 import pymysql # 创建链接得到一个链接对象 conn = pymysql.Connect(host="127.0.0.1", # 数据库服务器主机地址 ...

  4. 六、JDBC操作数据库

    文章目录 JDBC概述 概念 JDBC本质 JDBC好处 JDBC快速入门 JDBC API详解 DriverManager Connection 获取执行SQL的对象 管理事务 Statement ...

  5. djando2.2-django ORM的概念、通过ORM操作数据库

    文章目录 一.django ORM 1. ORM的概念 2. 模型类的书写 3. 进行迁移 4. Field类的常用选项 二.通过ORM操作数据库 1. 创建数据表 2. 字段的增删改 3. 记录的增 ...

  6. 开源作品ThinkJDBC—一行代码搞定数据库操作

    1 简介 ThinkJD,又名ThinkJDBC,一个简洁而强大的开源JDBC操作库.你可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作.ThinkJD会自动管理数据库连接, ...

  7. 不用一行代码,用 API 操作数据库,你信吗

    文 | 太阳雪 来源:Python 技术「ID: pythonall」 数据库的重要性不言而喻,但是数据库操作起来却不容易,需要用到各种管理工具,各种不同的连接方式,如果有方便的,屏蔽不同数据库细节的 ...

  8. thinkjdbc 关闭_ThinkJD: ThinkJD,又名ThinkJDBC,一个强大的开源JDBC/ORM操作库,让你尽可能简洁地用一行代码搞定数据库操作。...

    1 简介 ThinkJD,又名ThinkJDBC,一个简洁而强大的开源JDBC操作库.你可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作.ThinkJD会自动管理数据库连接, ...

  9. 一行代码,搞定浏览器数据库 IndexedDB

    作者 | 星尘starx 来源 | https://juejin.cn/post/6918705632757415950 前言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案可 ...

最新文章

  1. JAVA多线程中wait()方法的详细分析
  2. 气体润滑轴承matlab分析,气体润滑轴承的研究与发展
  3. 第16讲:异步爬虫的原理和解析
  4. 睡眠音频分割及识别问题(八)--数据采集
  5. Java Web应用小案例:查询城市天气信息
  6. Dubbo 学习总结(12)—— 十年再出发,Dubbo 3.0 Preview 即将在 3 月发布
  7. java jsfl是什么_java基础之IO2
  8. 圣经 英文有声 android,英文有声+Epub Foundation Series 7部 Isaac Asimov - Audiobook
  9. 50道经典计算机网络面试题梳理
  10. U盘文件系统FAT32转为NTFS
  11. 从Bus Hound开始学USB之U盘
  12. 基于onvif协议的嵌入式设备(摄像头)开发(客户端)
  13. 华为核心交换如何配置源地址转换_华为路由器和交换机配置地址转换
  14. Java常用工具类-根据物流单号,从快递100中获取物流详细信息,包含发货,签收等
  15. 优麒麟 22.04 LTS 版本正式发布 | UKUI 3.1开启全新体验
  16. 如何看懂论文公式:LaTex数学公式分析
  17. 入职快两个月的一些感悟
  18. RabbitMQ消息确认机制-可靠抵达
  19. 什么是操作系统虚拟机?
  20. EEG脑电公开数据库大盘点

热门文章

  1. Oracle kswapd0,kswapd0进程过一段时间占用CPU高达100%
  2. Pytorch应用之——人民币总结
  3. python编程之pygame游戏开发系列——软件简介与安装
  4. [GitHub]第二讲:GitHub客户端
  5. 今天浙大录取了 开个博客 讲讲考研的心路
  6. c语言实现汉诺塔(图解)
  7. obs-vs2022编译
  8. 雷达原理与系统仿真实验 LFM信号的目标回波与脉冲压缩处理
  9. Eclipse入门-网址
  10. python3.5.4爬取豆瓣中国内地电影票房总排行输出到excel