android中对sqlite数据库增删改查等操作非常简单,本案例用到最新版的greenDao3.2,由于其内存开销不大,使用简单,不用写sql语句,类似于java的hibernate,所以在android开发中广泛使用,下面来快速入门学习greenDao3.2的使用吧。
第一步:在build.gradle里面导入greenDao3.2所需要的依赖jar包,如果不知道是哪个,请将项目切换至project状态下,如图所示位置。
加入greenDao3.2的依赖,在如下。
//在dependencies{}里面加入如下两段代码 compile 'org.greenrobot:greendao:3.2.0' compile 'org.greenrobot:greendao-generator:3.2.0' //在dependencies{}外面加入以下配置信息,记住,是外面! apply plugin: 'org.greenrobot.greendao' buildscript { repositories { mavenCentral() //当有些包下载不下了可以采用jcenter()中心下载 //jcenter() } dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0' } } greendao { schemaVersion 1 //包名可以自定义,当定好实体类之后,按了上图“锤子”图标编译后会自动生成一些文件,后面会有说明 daoPackage 'com.anye.greendao.gen' targetGenDir 'src/main/java' }
第二步:定义Student实体类用于生成对应的sqlite数据表,以及对sqlite增删改查的dao类,本人定义了一个学生类,如下。
package com.baidu.greendaodemo; import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot.greendao.annotation.Generated; import org.greenrobot.greendao.annotation.Property; @Entity //此注解作用你懂的 public class Student { //经过测试主键自增长无效,添加数据时仍然需要设置id值,跟直接使用@Id注解没区别 //实体属性生成的数据库字段默认都是大写字母的 @Id(autoincrement = true) private long id; private String username; private String password; private String email; @Generated(hash = 400200733) public Student(long id, String username, String password, String email) { this.id = id; this.username = username; this.password = password; this.email = email; } @Generated(hash = 1556870573) public Student() { } public long getId() { return this.id; } public void setId(long id) { this.id = id; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "[id="+this.id+",username="+this.username+"," + "password="+this.password+",email="+this.email+"]"; } }
第三步:Student实体类定义好之后使用greenDao3.2生成对sqlite数据操作的类,按上图所示的“锤子”标志就会自动在com.anye.greendao.gen包下生成了,生成后的效果如图所示。
第四步:定义一个MySqliteUtils工具类,用于生成数据库和数据表,并且返回studentDao对象,供我们在其他类中使用此对象对sqlite增删改查操作,代码如下。
package com.baidu.greendaodemo; import android.app.Application; import com.anye.greendao.gen.DaoMaster; import com.anye.greendao.gen.DaoSession; import com.anye.greendao.gen.StudentDao; import org.greenrobot.greendao.database.Database; import static org.greenrobot.greendao.test.DbTest.DB_NAME; public class MySqliteUtils extends Application { private DaoMaster.DevOpenHelper devOpenHelper; private final static String DB_NAME = "greendaoDB"; private static StudentDao studentDao; //每个实体类对应一个dao //private static CourseDao courseDao; @Override public void onCreate() { super.onCreate(); //程序运行则创建数据库; devOpenHelper = new DaoMaster.DevOpenHelper(this,DB_NAME); System.out.println("数据库创建完成"+devOpenHelper.getDatabaseName()); //创建实体类对应的表 Database db = devOpenHelper.getWritableDb(); //创建数据表,系统会自动创建实体类对应的数据表 DaoMaster.createAllTables(db,true); DaoSession daoSession = new DaoMaster(db).newSession(); studentDao = daoSession.getStudentDao(); //courseDao = daoSession.getCourseDao(); } //返回操作student学生类的dao,供外部使用 public static StudentDao getStudentDao(){ return studentDao; } //返回操作课程表的dao也一样 // public static CourseDao getSourseDao(){ // return courseDao; // } }
注意:该工具类要想能在程序一运行时就创建数据库和数据表并且返回对应的dao,必须要继承Application上下文对象,并实现onCreate()方法,还要在AndroidManifest.xml文件的<application>标签内加入如下配置才能起到程序一运行就加载此类的作用。
android:name="com.baidu.greendaodemo.MySqliteUtils"
第五步:测试greenDao对sqlite增删改查的基本用法,本人为了省事直接在MainActivity.java类里面写增删改查测试了一下,主要是用法,你们用在哪里都可以,如下。
package com.baidu.greendaodemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import com.anye.greendao.gen.StudentDao; import java.util.List; public class MainActivity extends AppCompatActivity { private static StudentDao studentDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); studentDao = MySqliteUtils.getStudentDao(); //增加数据 // Student stu = new Student(); // stu.setId(5); // stu.setUsername("赵六"); // stu.setPassword("123456"); // stu.setEmail("22222@qq.com"); // studentDao.insert(stu); // long index = studentDao.getKey(stu); // System.out.println("插入数据的角标:"+index); //查询所有 // List<Student> list = studentDao.queryBuilder().list(); // for (Student s :list){ // System.out.println(s); // } //根据条件查询 // List<Student> list = studentDao.queryBuilder().where( // StudentDao.Properties.Username.eq("赵六"), // StudentDao.Properties.Id.eq(5)).list(); // for (Student s :list){ // System.out.println("学生:"+s); // } //删除数据 //studentDao.deleteByKey((long)5); //修改数据(这里是新new的对象,不太标准) //注意:update修改数据应该先根据id查询到student对象,然后用该对象重新设置一些值 //如果不这样的话,那些没设置的值就会被置空(null) Student stu = new Student(); stu.setId(4); stu.setUsername("王五"); //修改了密码和邮箱 stu.setPassword("111111"); stu.setEmail("111111@qq.com"); studentDao.update(stu); } }