greenDao的基本使用及用法详解
来源:互联网 发布:ff14人族捏脸数据分享 编辑:程序博客网 时间:2024/05/17 04:01
转载请标明出去: http://blog.csdn.net/small_and_smallworld
关于数据操作相关的库有不少,之前有写过用谷歌官方的一些工具类对数据库进行操作的demo,工程中需要使用greenDao来对数据库进行操作,因此写了个简单的demo,以及自己的一些理解。
前言
Android中的数据库使用的是Sqlite,至于这个玩意到底什么,不需要详细分析。你只需要知道,这是一种简单小巧轻量级的数据库类型,便于对一些简单的数据进行管理即可。这里不对谷歌官方操作的相关代码进行演示,只对greenDao的使用进行讲解。
PS:本笔记演示的greenDao版本为3.2.0
GreenDao 优点:
1.性能高,号称Android最快的关系型数据库
2.内存占用小
3.库文件比较小,小于100K
4.支持数据库加密 greendao支持SQLCipher进行数据库加密
5.简洁易用的API
使用步骤:
第一步:在项目的Build.gradle中添加如下配置:
- buildscript {
- repositories {
- jcenter()
- mavenCentral()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:1.5.0'
- classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
- }
- }
第二步:导入
compile 'org.greenrobot:greendao:3.1.1'compile 'org.greenrobot:greendao-generator:3.1.0'
第三步:添加配置
第四步:写实体类User
@Entitypublic class User { @Id private long id; private String name; @Generated(hash = 586692638) public User() { } @Generated(hash = 1144922831) public User(long id, String name) { this.id = id; this.name = name; } 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; }}
greenDao多使用注解,如果你要将某一实体存储到数据库中,需要先对实体进行编写。
@Entity表明该类是持久化的类【持久化含义,存入数据库文件中,作本地化处理】
@Id选择一个long或Long类型的属性作为该实体所对应数据库中数据表的主键【类型要是long】
@Generated写在构造方法前
将以上注解写好后,点击AS上的Make Project即可
然后可以发现,你的Module中多了个包,点开可以看到如下
先上布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="10dp" android:text="greenDao lib test" android:textColor="@android:color/black" /> <EditText android:id="@+id/etId" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户id" android:inputType="number" android:textSize="15sp" /> <EditText android:id="@+id/etName" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" android:textSize="15sp" /> <Button android:id="@+id/btnAdd" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="新增" /> <Button android:id="@+id/btnDelete" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="删除" /> <Button android:id="@+id/btnQuery" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="查询" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="10dp" android:text="查询结果" android:textColor="@android:color/black" /> <TextView android:id="@+id/tvQuery" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margin="10dp" android:textColor="@android:color/black" /></LinearLayout>
再来个图
然后是MainActivity
public class MainActivity extends AppCompatActivity { UserDao userDao; private EditText etId; private EditText etName; private Button btnAdd; private Button btnDelete; private Button btnQuery; private TextView tvQuery; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); initView(); initDbHelp(); /*新增一条数据*/ btnAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String id = etId.getText().toString(); String name = etName.getText().toString(); if (isNotEmpty(id) && isNotEmpty(name)) { QueryBuilder qb = userDao.queryBuilder(); ArrayList<User> list = (ArrayList<User>) qb.where(UserDao.Properties.Id.eq(id)).list(); if (list.size() > 0) { Toast.makeText(MainActivity.this, "主键重复", Toast.LENGTH_SHORT).show(); } else { userDao.insert(new User(Long.valueOf(id), name)); Toast.makeText(MainActivity.this, "插入数据成功", Toast.LENGTH_SHORT).show(); } } else { if (isEmpty(id) && isNotEmpty(name)) { Toast.makeText(MainActivity.this, "id为空", Toast.LENGTH_SHORT).show(); } if (isEmpty(name) && isNotEmpty(id)) { Toast.makeText(MainActivity.this, "姓名为空", Toast.LENGTH_SHORT).show(); } if (isEmpty(id) && isEmpty(name)) { Toast.makeText(MainActivity.this, "请填写信息", Toast.LENGTH_SHORT).show(); } } etId.setText(""); etName.setText(""); } }); /*删除指定数据*/ btnDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String id = etId.getText().toString(); if (isNotEmpty(id)) { userDao.deleteByKey(Long.valueOf(id)); QueryBuilder qb = userDao.queryBuilder(); ArrayList<User> list = (ArrayList<User>) qb.where(UserDao.Properties.Id.eq(id)).list(); if (list.size() < 1) { Toast.makeText(MainActivity.this, "删除数据成功", Toast.LENGTH_SHORT).show(); etId.setText(""); etName.setText(""); } } else { Toast.makeText(MainActivity.this, "id为空", Toast.LENGTH_SHORT).show(); } } }); /*查询数据*/ btnQuery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String id = etId.getText().toString(); if (isNotEmpty(id)) { QueryBuilder qb = userDao.queryBuilder(); ArrayList<User> list = (ArrayList<User>) qb.where(UserDao.Properties.Id.eq(id)).list(); if (list.size() > 0) { String text = ""; for (User user : list) { text = text + "\r\n" + user.getName(); } tvQuery.setText(text); } else { tvQuery.setText(""); Toast.makeText(MainActivity.this, "不存在该数据", Toast.LENGTH_SHORT).show(); } etId.setText(""); etName.setText(""); } else { Toast.makeText(MainActivity.this, "id为空", Toast.LENGTH_SHORT).show(); } } }); } /*初始化数据库相关*/ private void initDbHelp() { DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "recluse-db", null); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); DaoSession daoSession = daoMaster.newSession(); userDao = daoSession.getUserDao(); } private void initView() { etId = (EditText) findViewById(R.id.etId); etName = (EditText) findViewById(R.id.etName); btnAdd = (Button) findViewById(R.id.btnAdd); btnDelete = (Button) findViewById(R.id.btnDelete); btnQuery = (Button) findViewById(R.id.btnQuery); tvQuery = (TextView) findViewById(R.id.tvQuery); } private boolean isNotEmpty(String s) { if (s != null && !s.equals("") || s.length() > 0) { return true; } else { return false; } } private boolean isEmpty(String s) { if (isNotEmpty(s)) { return false; } else { return true; } }}
以上有一些判断是否成功的操作,因为greenDao并没有提供操作后的回调,所以我这里就只是手动判断一下
依次存入1/usher 、2/tom、3/harry 三组数据,然后提取数据库文件如下
好了,大功告成!!!
- greenDao的基本使用及用法详解
- greenDAO基本使用详解
- greenDAO的使用详解---(5)greenDAO高级用法
- GreenDao的基本使用及实例
- GreenDao 的基本使用
- greenDao的基本使用
- greenDao的基本使用
- GreenDao的基本使用
- greenDao的基本使用
- GreenDao的使用详解
- GreenDAO的使用基本篇
- ORM greenDAO基本用法
- GreenDao的配置及基本操作
- GreenDao 3.2.0 的基本使用
- GreenDao 3.2.0 的基本使用
- GreenDao 3.2.0 的基本使用
- GreenDao 3.2.0 的基本使用
- Android数据库之greendao的基本使用
- Android imageView图片按比例缩放
- 【spark 累加器】spark 累加器求1+2+3+4+5+......+100
- 如何在GlobalMapper中打开谷歌卫星地图
- IDEA搭建Spark程序开发环境
- 负载均衡之轮询算法
- greenDao的基本使用及用法详解
- SAPUI5教程——ABAP环境下SAP Fiori 系统搭建以及开发实践
- spring和spring mvc 中有关父子容器自我归纳
- AWS EC2小结
- oracle学习使用--oracle安装都安装为企业版
- 请问js对象属性值为什么用数组也可以访问
- 算法细节系列(34):再见字符串(2)
- 151组最易混淆的单词
- 二维数组中的查找(java版)