GreenDao的基本使用(android数据库)
2017-11-01 18:51
302 查看
在android中,在有些数据量相对较大或者处于安全考虑的情况下,会使用android自带的数据库—-sqlite:
但是使用sqlite需要考虑到以下几点:
在android开发中我们会遇到一些数据库,内部框架做了封装使用起来比较方便:如 ormLite greenDao等
相比而言,greendao应该是最快,效率最高的数据库框架(greendao官网有介绍),ok直接代码详解greemdao.进入正题:
//首先实在project的build中配置:
1.2
//在moudle的build中配置
需要注意一下 上面实体类通过注解会映射为数据库表(就不需要自己去写数据库创建的sal);
ok~下面来看注解:
@Entity表明该类是持久化的类(持久化含义,存入数据库文件中,作本地化处理)
@Id选择一个long或Long类型的属性作为该实体所对应数据库中数据表的主键(注意数据类型必须是long)
@Generated写在构造方法前
然后是关键性的一步build->Make Project然后自动生成数据库的操作类:
就是DaoMaster DaoSession UserDao;
在 App(extends Application中实现代码):
核心代码:
3.2数据库的增删改查:
ok~ 从上面代码中可以看到 没有依据sql的操作语句 而且 每次操作完成资源是自动开关,不需要你手动开关数据库/游标/事务
是不是很方便呢;
//app
//MainActivity
总而言之 greendao的框架作为android的数据库框架会很大程度提高效率;有兴趣的可以探讨其内部实现原理机制~感谢阅读 天气转冷 小心感冒哦
但是使用sqlite需要考虑到以下几点:
1.严格控制数据库资源的打开与关闭(db,cursor); 2.在遍历数据时候取到的是cursor要转化为list再使用 3.事务回滚,可以大大优化数据库的效率;
在android开发中我们会遇到一些数据库,内部框架做了封装使用起来比较方便:如 ormLite greenDao等
相比而言,greendao应该是最快,效率最高的数据库框架(greendao官网有介绍),ok直接代码详解greemdao.进入正题:
1.greenDao框架的初始化(准备工作与接入)
1.1//首先实在project的build中配置:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' //greenDao的配置 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' } }
1.2
//在moudle的build中配置
apply plugin: 'com.android.application' //greenDao依赖 apply plugin: 'org.greenrobot.greendao' android { ........ //在创建玩实体类之后make project 存放greenDao DB 的包位置 greendao { schemaVersion 1 daoPackage 'com.example.mysmall.greendao.greendao'//这个是生成代码保存的包名 targetGenDir 'src/main/java'//保存到java代码路径 } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude g 4000 roup: 'com.android.support', module: 'support-annotations' }) ..... //greenDao的配置 compile 'org.greenrobot:greendao:3.2.2' compile 'org.greenrobot:greendao-generator:3.2.2' }
2.创建实体类 接着点击 Build -> Make Project
创建实体类: @Generated(hash = 664611791)中的hash参数 是build->Make Project之后生成的:@Entity public class User { /**定义主键*/ @Id(autoincrement = true) private long id; private String name; private int age; private String sex; @Generated(hash = 664611791) public User(long id, String name, int age, String sex) { this.id = id; this.name = name; this.age = age; this.sex = sex; } @Generated(hash = 586692638) public User() { } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + '}'; } }
需要注意一下 上面实体类通过注解会映射为数据库表(就不需要自己去写数据库创建的sal);
ok~下面来看注解:
@Entity表明该类是持久化的类(持久化含义,存入数据库文件中,作本地化处理)
@Id选择一个long或Long类型的属性作为该实体所对应数据库中数据表的主键(注意数据类型必须是long)
@Generated写在构造方法前
然后是关键性的一步build->Make Project然后自动生成数据库的操作类:
就是DaoMaster DaoSession UserDao;
3数据库操作类生成 开始用greenDao操作数据库:(用log来展示每次操作的数据变化):
3.1数据库的初始化在 App(extends Application中实现代码):
public class App extends Application{ private UserDao userDao; private static App mApp; @Override public void onCreate() { super.onCreate(); /**初始化数据库*/ DaoMaster.DevOpenHelper mHelper = new DaoMaster. DevOpenHelper(this, "user-db", null); SQLiteDatabase db = mHelper.getWritableDatabase(); DaoMaster master = new DaoMaster(db); DaoSession daoSession = master.newSession(); userDao = daoSession.getUserDao(); } public static App getInstance(){ if (mApp == null){ synchronized (App.class){ mApp = new App(); } } return mApp; } public UserDao getDao(){ return userDao; } }
核心代码:
DaoMaster.DevOpenHelper mHelper = new DaoMaster. DevOpenHelper(this, "user-db", null); SQLiteDatabase db = mHelper.getWritableDatabase(); DaoMaster master = new DaoMaster(db); DaoSession daoSession = master.newSession(); userDao = daoSession.getUserDao();
3.2数据库的增删改查:
private void initDelete() { //mDao.deleteByKey(Long.valueOf(1)); String trim = mPos.getText().toString().trim(); if (trim != null && !trim.equals("")) { mDao.deleteByKey(Long.valueOf(trim)); QueryBuilder<User> qb = mDao.queryBuilder(); List<User> list = qb.where(UserDao.Properties.Id.eq(Long.valueOf(trim))).list(); if (list.size()<1){ Toast.makeText(this,"指定数据删除成功",Toast.LENGTH_SHORT).show(); } }else { mDao.deleteAll(); } } private void initUpdate() { String trim = mPos.getText().toString().trim(); if (trim != null && !trim.equals("")) { User user = mDao.load(Long.valueOf(trim)); user.setName("保尔柯察金"); mDao.update(user); } } private void initInsert() { for (int i = 0; i < 5; i++) { mIndex ++; if (isEcho(String.valueOf(mIndex))){ Toast.makeText(this,"主键重复",Toast.LENGTH_SHORT).show(); }else { User user = new User(Long.valueOf(mIndex), "张三" + i, 18, "男"); mDao.insert(user); } } } private void initSelect() { Query<User> query = mDao.queryBuilder().orderAsc(UserDao.Properties.Id).build(); List<User> list = query.list(); for (int i = 0; i < list.size(); i++) { User user = list.get(i); String s = user.toString(); Log.i("query",s); } } /**判断主键是否重复*/ private boolean isEcho(String id){ QueryBuilder<User> qb = mDao.queryBuilder(); List<User> list = qb.where(UserDao.Properties.Id.eq(id)).list(); if (list.size() > 0){ return true; } return false; }
ok~ 从上面代码中可以看到 没有依据sql的操作语句 而且 每次操作完成资源是自动开关,不需要你手动开关数据库/游标/事务
是不是很方便呢;
4完整代码展示 :
下面粘贴完整代码://app
package com.example.mysmall.greendao.global; import android.app.Application; import android.database.sqlite.SQLiteDatabase; import com.example.mysmall.greendao.greendao.DaoMaster; import com.example.mysmall.greendao.greendao.DaoSession; import com.example.mysmall.greendao.greendao.UserDao; /** * Created by houruixiang on 2017/10/31. */ public class App extends Application{ private UserDao userDao; private static App mApp; @Override public void onCreate() { super.onCreate(); /**初始化数据库*/ DaoMaster.DevOpenHelper mHelper = new DaoMaster.DevOpenHelper(this, "user-db", null); SQLiteDatabase db = mHelper.getWritableDatabase(); DaoMaster master = new DaoMaster(db); DaoSession daoSession = master.newSession(); userDao = daoSession.getUserDao(); } public static App getInstance(){ if (mApp == null){ synchronized (App.class){ mApp = new App(); } } return mApp; } public UserDao getDao(){ return userDao; } }
//MainActivity
package com.example.mysmall.greendao; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.example.mysmall.greendao.global.App; import com.example.mysmall.greendao.greendao.UserDao; import com.example.mysmall.greendao.model.User; import org.greenrobot.greendao.query.Query; import org.greenrobot.greendao.query.QueryBuilder; import java.util.List; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mSelect; private Button mInsert; private Button mUpdate; private Button mDelete; private int mInde c7eb x; private UserDao mDao; private EditText mPos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /**获取数据库操作对象*/ mDao = ((App) getApplication()).getDao(); initView(); } private void initView() { mSelect = (Button) findViewById(R.id.seclet); mInsert = (Button) findViewById(R.id.insert); mUpdate = (Button) findViewById(R.id.update); mDelete = (Button) findViewById(R.id.delete); mPos = (EditText) findViewById(R.id.tarPosition); mSelect.setOnClickListener(this); mInsert.setOnClickListener(this); mUpdate.setOnClickListener(this); mDelete.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.seclet: initSelect(); break; case R.id.insert: initInsert(); break; case R.id.update: initUpdate(); break; case R.id.delete: initDelete(); break; } } private void initDelete() { //mDao.deleteByKey(Long.valueOf(1)); String trim = mPos.getText().toString().trim(); if (trim != null && !trim.equals("")) { mDao.deleteByKey(Long.valueOf(trim)); QueryBuilder<User> qb = mDao.queryBuilder(); List<User> list = qb.where(UserDao.Properties.Id.eq(Long.valueOf(trim))).list(); if (list.size()<1){ Toast.makeText(this,"指定数据删除成功",Toast.LENGTH_SHORT).show(); } }else { mDao.deleteAll(); } } private void initUpdate() { String trim = mPos.getText().toString().trim(); if (trim != null && !trim.equals("")) { User user = mDao.load(Long.valueOf(trim)); user.setName("保尔柯察金"); mDao.update(user); } } private void initInsert() { for (int i = 0; i < 5; i++) { mIndex ++; if (isEcho(String.valueOf(mIndex))){ Toast.makeText(this,"主键重复",Toast.LENGTH_SHORT).show(); }else { User user = new User(Long.valueOf(mIndex), "张三" + i, 18, "男"); mDao.insert(user); } } } private void initSelect() { Query<User> query = mDao.queryBuilder().orderAsc(UserDao.Properties.Id).build(); List<User> list = query.list(); for (int i = 0; i < list.size(); i++) { User user = list.get(i); String s = user.toString(); Log.i("query",s); } } /**判断主键是否重复*/ private boolean isEcho(String id){ QueryBuilder<User> qb = mDao.queryBuilder(); List<User> list = qb.where(UserDao.Properties.Id.eq(id)).list(); if (list.size() > 0){ return true; } return false; } }
总而言之 greendao的框架作为android的数据库框架会很大程度提高效率;有兴趣的可以探讨其内部实现原理机制~感谢阅读 天气转冷 小心感冒哦
相关文章推荐
- Android greenDAO 数据库 简单学习之基本使用
- Android greenDAO 数据库 简单学习之基本使用
- Android使用OrmLite数据库框架 之 基本用法
- Android 数据库ORM框架GreenDao学习心得及使用总结<二>
- 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- android使用GreenDao操作数据库
- Android使用GreenDao连接数据库
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- 配置使用Android数据库开源框架GreenDao
- 【Android】在Android上使用OrmLite数据库框架 之 基本用法
- 提高android数据库性能,GreenDao初步使用
- 配置使用Android数据库开源框架GreenDao
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android数据库Realm学习(一)基本使用
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android greenDao 数据库的使用(一)
- Android开源:数据库ORM框架GreenDao学习心得及使用总结
- Android 数据库ORM框架GreenDao学习心得及使用总结<一>