Android中轻松使用greenDao实现数据持久化
来源:互联网 发布:mac flac转mp3 编辑:程序博客网 时间:2024/05/26 09:56
文章背景
程序猿或是程序媛们在开发Android项目的时候,在使用原始方法来操作SQLite数据库实现数据本地持久化时,往往要编写大量的sql语句来实现数据库的各种操作,这对程序员的技术要求较高,同时在一定程度上影响开发效率,那么我们可以使用目前市面上比较流行的第三方数据库操作库greenDao。但本人还是强烈建议先学习SQLite原始操作方法,万变不理其中,这样再学习greenDao就会变得更轻松,更深刻些,可以参考:http://blog.csdn.net/xinanheishao/article/details/73436291
文章目标
greenDao实现数据库建库建表
greenDao实现增删改查操作
提供一个数据库操作工具给大伙。
greenDao简单介绍
greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案,所谓ORM可以简单理解为框架可以把数据库的表自动转化为实体模型,程序员只要操作实体即可,操作实体即操作对应的表,这种框架设计是目前比较流行也是软件开发的趋势。
greenDao是一个精简的库
greenDao和同类型的库相比,性能是最好的,不过数据量不大的情况下,也看不出性能优势
greenDao内存开销最小化
greenDao易于使用的 APIs
演示效果图:
导入greenDao3.0库
dependencies { compile 'org.greenrobot:greendao:3.0.1' compile 'org.greenrobot:greendao-generator:3.0.0'}
gradle中的greenDao相关配置
在gradle的中配置完毕之后,sync project一下,gradle会自动去远程仓库下载一个gradle的插件,专为greenDAO服务的,用来生成数据库相关的代码。
apply plugin: 'org.greenrobot.greendao'buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }}
greenDao生成配置
配置说明:
schemaVersion—->指定数据库schema版本号,迁移等操作会用到
daoPackage——–>通过gradle插件生成的数据库相关文件的包名,默认为你 的entity所在的包名
targetGenDir——–>这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的java目录中,而不是build中,这样就不用额外的设置资源目录了
greendao { schemaVersion 1 daoPackage 'com.example.yangdechengapplication.greendao' targetGenDir 'src/main/java'}
实体类的生成
package com.example.yangdechengapplication.entity;import org.greenrobot.greendao.annotation.Entity;import org.greenrobot.greendao.annotation.Id;import org.greenrobot.greendao.annotation.Transient;import org.greenrobot.greendao.annotation.Generated;/** * Created by Administrator on 2017/6/25. */@Entitypublic class User { @Id private Long id; private String userNo; private String name; @Transient private int tempUsageCount; // not persisted public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getUserNo() { return this.userNo; } public void setUserNo(String userNo) { this.userNo = userNo; } @Generated(hash = 1192512955) public User(Long id, String userNo, String name) { this.id = id; this.userNo = userNo; this.name = name; } @Generated(hash = 586692638) public User() { }}
实体类中常用的注解:
@Entity 表明这个实体类会在数据库中生成一个与之相对应的表。
@Id 对应数据表中的 Id 字段,有了解数据库的话,是一条数据的唯一标识。
@Property(nameInDb = “STUDENTNUM”) 表名这个属性对应数据表中的 STUDENTNUM 字段。
@Property 可以自定义字段名,注意外键不能使用该属性
@NotNull 该属性值不能为空
@Transient 该属性不会被存入数据库中
@Unique 表名该属性在数据库中只能有唯一值
当你编写完实体之后,点击编译根据实体类会在greenDao配置的目录下生成三个数据库数据库相关的类:DaoSession、DaoMaster以及所有实体类的dao类,其中DaoMaster 和 DaoSession 这两个类用于初始化数据库,UserDao就是操作User表的类。
如图所示:
GreenDaoHelper
这是我封装的数据库库初始化的帮助类
package com.example.yangdechengapplication.data;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import com.example.yangdechengapplication.MyApplication;import com.example.yangdechengapplication.greendao.DaoMaster;import com.example.yangdechengapplication.greendao.DaoSession;/** * Created by Administrator on 2017/6/25. */public class GreenDaoHelper { private static DaoMaster.DevOpenHelper mHelper; private static SQLiteDatabase db; private static DaoMaster mDaoMaster; private static DaoSession mDaoSession; private static GreenDaoHelper instance = new GreenDaoHelper(); public static GreenDaoHelper getInstance(){ return instance; } /** * 初始化greenDao,这个操作建议在Application初始化的时候添加; */ public static void initGreenDao(Context context) { // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。 // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 mHelper = new DaoMaster.DevOpenHelper(context, "mygreendb", null); db = mHelper.getWritableDatabase(); // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。 mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); } public static DaoSession getDaoSession() { return mDaoSession; } public static SQLiteDatabase getDb() { return db; }}
然后再程序的入口初始化数据库
package com.example.yangdechengapplication;import android.app.Application;import com.example.yangdechengapplication.data.BaseDBHelper;import com.example.yangdechengapplication.data.GreenDaoHelper;import com.example.yangdechengapplication.tools.CrashHandler;import com.example.yangdechengapplication.tools.LogToFile;/** * Created by Administrator on 2017/6/15. */public class MyApplication extends Application { private final static float HEAP_UTILIZATION = 0.75f; private final static int MIN_HEAP_SIZE = 6* 1024* 1024 ; @Override public void onCreate() { super.onCreate(); // 异常处理,不需要处理时注释掉这两句即可! CrashHandler crashHandler = CrashHandler.getInstance(); // 注册crashHandler crashHandler.init(getApplicationContext()); LogToFile.init(getApplicationContext()); //ydc 20170616 初始化数据库 BaseDBHelper.getInstance().init(getApplicationContext()); //ydc 20170629 初始化greenDao数据库 GreenDaoHelper.initGreenDao(getApplicationContext()); }}
查看数据库
如果是模拟器运行的话,Android系统底层是Linux构建的,所以我们可以使用adb shell命令来查看我们所创建的数据库,步骤如下:
adb shell
su
ls -l
cd data
ls -l
cd data
ls -l
cd 你的包名
ls -l
cd databases
ls -l
还可以进一步操作:
在 # 提示符下输入以下命令,我们进入sqlite(Figure3)。
sqlite3 mygreendb.db
这个命令会打开mygreendb.db数据库,若mygreendb.db数据库不存在,则会新建一个名为
mygreendb.db的数据库。(注意数据库名大小写有区别)
在sqlite>提示符下输入
.help 这个命令让我们看到许多命令
.tables 查看所有表,例如我的系统里有USER表
数据库增删改查操作
在Activity中获取UserDao实例
UserDao userDao= GreenDaoHelper.getDaoSession().getUserDao();
增加操作
User user = new User(null,String.valueOf(userNo), "张三"); userDao.insert(user);
删除操作
userDao.deleteAll();
修改操作
先根据编号获取的想修改的User实体,再做修改
User user=getUserByNo(String.valueOf(2)); user.setName("李四"); userDao.update(user);private User getUserByNo(String userNo){ user=userDao.queryBuilder().where(UserDao.Properties.UserNo.eq(userNo)).unique(); return user; }
查询操作
List<User> userList = userDao.queryBuilder() .where(UserDao.Properties.Id.notEq(999)) .orderAsc(UserDao.Properties.Id) .limit(5) .build().list();
GreendaoActivity
greenDao增删改查操作所在类Activity
package com.example.yangdechengapplication;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.example.yangdechengapplication.data.DBHelperService;import com.example.yangdechengapplication.data.GreenDaoHelper;import com.example.yangdechengapplication.entity.User;import com.example.yangdechengapplication.greendao.UserDao;import java.util.List;/** * Created by ydc on 2017/6/25. */public class GreendaoActivity extends AppCompatActivity { private Button delete; private Button insertButton; private Button updateButton; private Button queryButton; private TextView tv_info; private UserDao userDao; private User user; private int userNo=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_greendao); userDao= GreenDaoHelper.getDaoSession().getUserDao(); delete = (Button)findViewById(R.id.delete); updateButton = (Button)findViewById(R.id.update); insertButton = (Button)findViewById(R.id.insert); queryButton = (Button)findViewById(R.id.query); tv_info=(TextView)findViewById(R.id.tv_info); delete.setOnClickListener(new DeleteListener()); updateButton.setOnClickListener(new UpdateListener()); insertButton.setOnClickListener(new InsertListener()); queryButton.setOnClickListener(new QueryListener()); } class InsertListener implements View.OnClickListener { @Override public void onClick(View v) { userNo++; user = new User(null,String.valueOf(userNo), "张三"); userDao.insert(user); } } class UpdateListener implements View.OnClickListener { @Override public void onClick(View arg0) { user=getUserByNo(String.valueOf(userNo)); user.setName("李四"); userDao.update(user); } } class QueryListener implements View.OnClickListener { @Override public void onClick(View v) { String names=""; List<User> userList = userDao.queryBuilder() .where(UserDao.Properties.Id.notEq(999)) .orderAsc(UserDao.Properties.Id) .limit(5) .build().list(); for (User u: userList ) { names+="姓名:"+u.getName()+" 学号:"+u.getUserNo()+";\n"; } tv_info.setText(names); } } class DeleteListener implements View.OnClickListener { @Override public void onClick(View v) { userDao.deleteAll(); } } private User getUserByNo(String userNo){ user=userDao.queryBuilder().where(UserDao.Properties.UserNo.eq(userNo)).unique(); return user; }}
Dome下载地址:http://download.csdn.net/download/xinanheishao/9880447
- Android中轻松使用greenDao实现数据持久化
- Android中GreenDao的使用
- Android中使用ormlite实现持久化--HelloOrmLite
- Android中使用ormlite实现持久化--…
- Android中使用ormlite实现持久化--HelloOrmLite
- Android中使用ormlite实现持久化--HelloOrmLite
- Android中使用ormlite实现持久化--HelloOrmLite
- Android中使用ormlite实现持久化(一)--HelloOrmLite
- Android中使用ormlite实现持久化(一)--HelloOrmLite
- GreenDao源码分析及使用GreenDao实现静态数据缓存
- Android中使用Ormlite实现持久化(二)--持久化类的详细配置
- Android 数据持久化
- Android 数据持久化
- Android数据持久化
- android 数据持久化
- Android 数据持久化
- Android 数据持久化
- Android 数据持久化
- php如何实现上一篇下一篇
- Python 实现1007. Maximum Subsequence Sum (25)
- Spring框架的原理解析
- const笔记
- 计蒜客 管家的忠诚(二) 线段树(水题续)
- Android中轻松使用greenDao实现数据持久化
- linux下安装GraphicsMagick
- java中10大常见异常
- ARP地址解析协议原理
- 左程云_算法与数据结构 — 链表问题 — 02在单链表和双链表中删除倒数第K个节点
- 学习Linux命令(46)
- 面试题34:丑数
- Spring学习笔记之使用Spring发送Email
- Java面试集锦