Android Studio平台使用GreenDao操作数据库
来源:互联网 发布:c stl 源码解析 pdf 编辑:程序博客网 时间:2024/04/30 06:16
一.GreenDao是什么?
GreenDao的官方网站;
http://greendao-orm.com/
简单说就是一个可以方便操作SQLite数据库的第三方库;
二.使用流程
1.创建一个java程序;
2.在java程序中书写代码,运行后会生成一系列实体类和其他类(详细下面会说),代码中指定生成的类的路径、数据库表的字段等信息;
3.在Android程序中初始化一系列对象,即可对数据库进行非常方便的增、删、改、查的操作;
三.开始写Demo了哈~!
1.使用AS创建一个项目,具体流程如下:
略
2.项目创建好了之后,不要心急,先新建一个Java类型的Module,选择File -> New -> New Module ,类型选择Java Library ,当然库名、包名和类名随便啦。我这里起的名字如下:库名–greendaogenerator,包名-com.lanou3g.greenrobot,类名-ExpDaoGrnerator;
3.添加这个Java Module的GreenDao依赖,打开Java库下面的build.gradle文件,添加如下依赖:
compile ‘de.greenrobot:greendao-generator:2.0.0’
4.打开Java文件,写入如下内容:
package com.lanou3g.greenrobot;import de.greenrobot.daogenerator.DaoGenerator;import de.greenrobot.daogenerator.Entity;import de.greenrobot.daogenerator.Schema;public class ExpDaoGenerator { public static void main(String[] args) { // 创建Schema对象 // 构造方法第一个参数为数据库版本号 // 第二个参数为自动生成的实体类将要存放的位置,前面为我的Android Module的包名 Schema schema = new Schema(1000, "com.lanou3g.greendaodemo.entity.greendao"); // 添加需要创建的实体类信息 addNote(schema); try { // 创建实体类.第二个参数填Android Module的路径 new DaoGenerator().generateAll(schema, "./AppExample/src/main/java"); } catch (Exception e) { e.printStackTrace(); } } /** * 添加将要创建的实体类的信息,会根据类名生成数据库的表,属性名生成数据库的字段<p> * 当然如果想建多张表,可以创建多个Entity对象 * * @param schema */ private static void addNote(Schema schema) { // 指定需要生成实体类的类名,类名确定了那么表名也是根据这个类名来自动命名的,例如下面这个,生成的表名叫做person_entity Entity entity = schema.addEntity("PersonEntity"); // 指定自增长主键 entity.addIdProperty().autoincrement().primaryKey(); // 添加类的属性,根据属性生成数据库表中的字段 entity.addStringProperty("name"); entity.addIntProperty("age"); entity.addStringProperty("sex"); }}
在java文件上面右键,选择Run’ExpDaoGenerator main()’,运行后,会在Android Module下面的相应包下生成一系列的java类文件,如下图:
至此,Java程序的作用就结束了,可以退休了,下面是在Android Module中的使用方式了
5.打开Android Module,默认名字叫app,我这里改成了AppExample,打开这里面的build.gradle文件,添加依赖如下:
compile ‘de.greenrobot:greendao:2.0.0’
跟刚才Java那个不一样是吧,看出区别来了吧;
6.进行数据库中对应表的操作,需要进行一系列的初始化,看代码:
public class MainActivity extends AppCompatActivity { /** 省略一些控件的声明 */ // 数据库 private SQLiteDatabase db; // 管理者 private DaoMaster mDaoMaster; // 会话 private DaoSession mDaoSession; // 对应的表,由java代码生成的,对数据库内相应的表操作使用此对象 private PersonEntityDao personDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initDatabase(); } private void initDatabase() { // 初始化就这个顺序,记着吧 ^_^ // 此DevOpenHelper类继承自SQLiteOpenHelper,第一个参数Context,第二个参数数据库名字,第三个参数CursorFactory DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this,"daodemo.db",null); db = helper.getWritableDatabase(); mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); PersonEntityDao personDao = mDaoSession.getPersonEntityDao(); // 删除表内所有数据(我为什么要写这个方法...太简单了吧也),写入前先清空一下,防止id冲突导致报错 personDao.deleteAll(); // 下面对数据库内的表进行操作 // 首先模拟一些数据 List<PersonEntity> personList = new ArrayList<>(); for (int i = 0; i < 20; i++) { PersonEntity person = new PersonEntity((long) i,"孙悟空"+i,20+i,"男"); // 使用这个方法可以一条一条的写入数据库 personDao.insert(person); // 插入或者替换单条数据,就是id重复也可以使用// personDao.insertOrReplace(person); personList.add(person); } // 这个方法可以将一个集合直接写入数据库,很方便// personDao.insertInTx(personList); // 看名字也知道是干嘛的了吧,把数据写入,或者替换// personDao.insertOrReplaceInTx(personList); // 根据id删除数据 - -! 我真的一定要写出来么 personDao.deleteByKey(3l); // 更新表内元素 personDao.update(new PersonEntity(5l,"贝吉塔",100,"男")); // 查表,结果直接返回到链表中,下面的三种方法都可以进行查表操作,将所有信息都查出来 List<PersonEntity> queryList = personDao.queryBuilder().list();// queryList = personDao.queryBuilder().listLazy();// queryList = personDao.loadAll(); // 输出结果,看一下 for (PersonEntity personEntity : queryList) { Log.d("TAGGG",personEntity.getName()); } } private void initView() { /** 初始化控件的,没什么用,省略了 */ }}
下面看一下数据库内的内容:
可以看到id为3的那一条数据被删除掉了,id为5的那一条数据被修改了;
再看一下Logcat输出内容:
可以看到,数据成功的查找出来了;
7.很多界面都这么写数据库肯定会很麻烦嘛,所以需要使用单例.我就简单写一个了,见笑啦,代码如下
public class DaoSingleton { private static final String DATABASE_NAME = "daodemo.db"; private volatile static DaoSingleton instance; private SQLiteDatabase db; private DaoMaster daoMaster; private DaoSession daoSession; private Context context; private DaoMaster.DevOpenHelper helper; private PersonEntityDao personDao; private DaoSingleton() { context = BaseApplication.getContext(); } public static DaoSingleton getInstance() { if (instance == null) { synchronized (DaoSingleton.class){ if (instance == null) { instance = new DaoSingleton(); } } } return instance; } public DaoMaster.DevOpenHelper getHelper() { if (helper == null) { helper = new DaoMaster.DevOpenHelper(context,DATABASE_NAME,null); } return helper; } private SQLiteDatabase getDb(){ if (db == null) { db = getHelper().getWritableDatabase(); } return db; } private DaoMaster getDaoMaster() { if (daoMaster == null) { daoMaster = new DaoMaster(getDb()); } return daoMaster; } public DaoSession getDaoSession() { if (daoSession == null) { daoSession = getDaoMaster().newSession(); } return daoSession; } public PersonEntityDao getPersonDao() { if (personDao == null) { personDao = getDaoSession().getPersonEntityDao(); } return personDao; }}
里面用到的Context使用的是Application的,防止单例类长时间持有其他Activity的Context,影响性能;使用的话,直接在代码中调用
PersonEntityDao personDao = DaoSingleton.getInstance().getPersonDao();
来获取对象;
好了,结束,欢迎批评指正,谢谢!
- Android Studio平台使用GreenDao操作数据库
- Android studio,使用greenDao第三方数据库框架操作数据库
- android使用GreenDao操作数据库
- Android studio使用greendao作为数据库框架
- Android 初使用GreenDAO框架操作数据库
- Android数据库操作--greenDAO的入门使用
- Android studio使用greenDao
- Android 数据库 GreenDao使用
- GreenDao 在 Android Studio 中的配置使用 之 更新数据库
- Android studio配置使用GreenDao
- Android studio,使用greenDao第三方数据库框架操作数据库(二)(升级管理,自定义数据库路径,数据库升级操作)
- android greenDao SQLite数据库操作工具类使用
- android greenDao SQLite数据库操作工具类使用
- Android操作数据库的框架-GreenDao基本使用记录
- Android数据库操作第三方库GreenDao的使用
- Android GreenDao数据库框架使用
- Android使用GreenDao连接数据库
- Android--------GreenDao数据库的使用
- iOS基础知识:if 语句以及if语句的使用注意事项
- IOS绘制图片水印以及文字水印
- addTarget各个参数的含义:
- v2
- ubuntu14.04 源码安装Qt 5.4
- Android Studio平台使用GreenDao操作数据库
- Spark standalone模式安装
- HDU-2845-Beans-简单dp
- CoreData的版本迭代
- <LeetCode><Easy> 70 Climbing Stairs #斐波那契数列
- javaweb学习路线
- Mac打开终端的方法
- (一)蚂蚁是否能到另一端
- 缓存