一行代码操作数据库GreenDao
来源:互联网 发布:淘宝在国外 编辑:程序博客网 时间:2024/06/14 08:51
上篇文章写了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();
将需要动态改变的对外暴露一个方法,让子类去实现它,所以我上个列子的子类是这样的
@Override protected void getDao() { dao = mDaoSession.getUserDao(); } @Override protected 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; @Override protected 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(); } @Override protected int getLayoutId() { return R.layout.activity_main; } @Override protected void getDao() { dao = mDaoSession.getUserDao(); } @Override protected 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; } @Override public 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; @Override protected 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
- GreenDao自动生成Android数据库操作代码
- Greendao操作数据库
- 一行代码完成HibernateTemplate各种数据库操作
- greenDao 代码阅读 数据操作
- android使用GreenDao操作数据库
- GreenDao操作数据库版本升级
- Andoird:用LitePal操作数据库(第一行代码Android学习)
- android greenDao SQLite数据库操作工具类
- android:SQLiteOpenHelper 与 greenDao 数据库操作
- android 数据库操作 GreenDAO 第三方开源项目
- Android Studio平台使用GreenDao操作数据库
- 高效的GreenDao 数据库操作框架应用
- Android的用GreenDao操作数据库
- Android 初使用GreenDAO框架操作数据库
- 使用GreenDao对数据库进行操作
- Android数据库操作--greenDAO的入门使用
- Android之---用GreenDao操作数据库
- SQL 数据类型
- 深度抠图--Deep Image Matting
- react-native 的生命周期,以及通信关系,转载
- 微信小程序
- mysql prepare 存储过程使用
- 一行代码操作数据库GreenDao
- 用Altium Designer制作电路板学习笔记(一)
- pip 配置使用国内 阿里云/豆瓣 pip源
- C++中const在函数名前面和函数后面的区别
- Android 5.0 状态栏(SystemUI)系统图标加载流程简单分析
- Android数据填充器LayoutInflater
- maven--私服的搭建(Nexus的使用)
- 数据库查询错误
- angular学习(四)—— Services