最近开始正式接触Android开发,这是首次使用博客,也是初步接触GreenDAO,写的会很初级。大家如果看了我的文章,不论是文章本身的不足,还是代码本身的缺陷,都欢迎帮忙多多指出,先在此谢过。同时也希望我的文章能帮到同样刚开始接触GreenDAO的朋友。
本文的内容是利用GreenDAO对SQLite数据库中的表单进行创建并实现增删查改等功能。
首先是对于GreenDAO的简单介绍:
GreenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,
通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。
GreenDAO的主要设计目标:最大性能(最快的Android ORM)、易于使用API、高度优化、最小内存消耗。
GreenDAO官网:http://greendao-orm.com/
项目下载地址:https://github.com/greenrobot/greenDAO(或者官网)
官方Demo里共有六个工程目录,分别为:
(1).DaoCore:库目录,即jar文件greendao-1.3.7.jar的代码;
(2).DaoExample:android范例工程;
(3).DaoExampleGenerator:DaoExample工程的DAO类构造器,java工程;
(4).DaoGenerator:DAO类构造器,java工程;
(5).DaoTest、PerformanceTestOrmLite:其他测试相关的工程。
学习使用步骤:
一、DAO类的构造
首先需要新建一个java工程来生成DAO类文件,该工程需要导入greendao-generator.jar和freemarker.jar文件到项目中。(右键当前项目–Build Path–Configure Build Path–Libraries–Add External JARs即可导入)
以下是我本次项目中建立的java工程,目标是设置一个有关学生信息的实体类。
package org.yijing.test;
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
public class Make {
public static void main(String[] args) throws Exception {
//该方法第一个参数用来更新数据库版本号,第二个参数为要生成的DAO类所在包路径
Schema schema = new Schema(3, "org.yijing.test");
//进行建表
addInfo(schema);
//设置要生成DAO文件的目标工程的项目名称,其中src-gen这个目录名需要在运行前手动创建,否则报错
new DaoGenerator().generateAll(schema, "../StudentInfo/src-gen");
}
//设置名为StudentInfo(学生信息)的实体对象包含有“(自增长)ID”、“学号”、“姓名”、“年龄”等属性
private static void addInfo(Schema schema) {
Entity info = schema.addEntity("StudentInfo");
info.addIdProperty().autoincrement();
info.addIntProperty("number");
info.addStringProperty("name").notNull();
info.addIntProperty("age");
}
}
代码中每一步骤的实现目标均已注释。
其中默认表名就是类名,也可以自定义表名:
info.setTableName("StudentInformation");
若运行后出现以下的提示说明DAO文件自动生成成功了,刷新一下StudentInfo项目即可看到。
greenDAO Generator
Copyright 2011-2014 Markus Junginger, greenrobot.de. Licensed under GPL V3.
This program comes with ABSOLUTELY NO WARRANTY
Processing schema version 3...
Written J:\Android\work\workspace\StudentInfo\src-gen\org\yijing\test\StudentInfoDao.java
Written J:\Android\work\workspace\StudentInfo\src-gen\org\yijing\test\StudentInfo.java
Written J:\Android\work\workspace\StudentInfo\src-gen\org\yijing\test\DaoMaster.java
Written J:\Android\work\workspace\StudentInfo\src-gen\org\yijing\test\DaoSession.java
Processed 1 entities in 113ms
二、表的增删查改
增删查改其实相当方便,完全的面向对象,不需要涉及到任何的sql语言。
以下就是我本次项目的主体,也就是对增删查改的具体实现,功能详细来说有五:
1.添加学生信息,包括学号、姓名、年龄
2.通过学号查询对应学生的姓名
3.根据ID顺序每五人一组,通过分组号查询对应五名学生的姓名
4.输入学号,删除对应的学生信息
5.输入学号,以及修改后的名字,完成该学号对应的学生姓名的修改
具体代码如下(先上完整代码,再逐步分析):
package org.yijing.test.studentinfo;
import java.util.List;
import org.yijing.test.DaoMaster;
import org.yijing.test.DaoMaster.DevOpenHelper;
import org.yijing.test.DaoSession;
import org.yijing.test.StudentInfo;
import org.yijing.test.StudentInfoDao;
import org.yijing.test.StudentInfoDao.Properties;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import de.greenrobot.dao.query.QueryBuilder;
public class MainActivity extends ActionBarActivity {
private SQLiteDatabase db;
private EditText addNumberText, addNameText, addAgeText, queryNumberText,
queryGroupText, delNumberText, alterNumberText, alterNameText;
private TextView queryNameText, queryGroupNameText,allMemberQuantityText;
private DaoMaster daoMaster;
private DaoSession daoSession;
private StudentInfoDao studentInfoDao;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout