【11】【3】【完结】Android GreenDao 增删改查 实战

版权声明:独学而无友,则孤陋寡闻。q群582951247 https://blog.csdn.net/mp624183768/article/details/82841320

我把这个demo 发布到了git 上 我要去看看

需要可以去下载

我们需要对 greenDao做二次封装 以便于使用

新建 dbmanager 文件 里面分别存放  CommonUtils DaoManager

DaoManager 有四个作用

/**
 * 1 创建数据库
 * 2 创建数据库的表
 * 3 包含对数据库的CRUD
 * 4 对数据的升级
 */

CommonUtils 

完成对某一张表的具体操作 ORM 操作的是对象 Student

再次强调一下 对象操作就是数据库操作 而类名就是表名 所以表名为SUDENT  

属性名称为字段名称

java-gen是用生成器生成的所以此处我就不再贴了

DaoManager

扫描二维码关注公众号,回复: 3519219 查看本文章
package com.boradcasst.liuan.greendaodemo.dbmanager;

import android.content.Context;

import com.student.dao.DaoMaster;
import com.student.dao.DaoSession;

import org.greenrobot.greendao.query.QueryBuilder;

/**
 * 1 创建数据库
 * 2 创建数据库的表
 * 3 包含对数据库的CRUD
 * 4 对数据的升级
 */
public class DaoManager {
    private static final String TAG = "DbManager";
    private static final String DB_NAME = "mydb.sqlite";//数据库名称
    private volatile static DaoManager manager;//多线程访问
    private static DaoMaster.DevOpenHelper helper;
    private static DaoMaster daoMaster;
    private static DaoSession daoSession;
    private Context context;

    /**
     * 使用单例模式 获得操作数据库的对象
     * @return
     */
    public void  init(Context context){
        this.context=context;
    }
    public static DaoManager getInstance() {
        DaoManager instance = null;
        if (manager == null) {
            synchronized (DaoManager.class) {
                if (instance == null) {
                    instance = new DaoManager();
                    manager = instance;
                }
            }
        }
        return  instance;
    }

    /**
     * 判断是否有存在数据库 如果没有则创建数据库
     * @return
     */
    public DaoMaster getDaoMaster(){
        if(daoMaster==null){
            DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
            daoMaster=new DaoMaster(devOpenHelper.getWritableDatabase());
        }
        return daoMaster;
    }

    /**
     * 完成对数据库的添加 删除 修改 查询的操作 仅仅是一个接口
     * @return
     */
    public DaoSession getDaoSession(){
        if (daoSession == null) {
            if (daoMaster == null) {
                daoMaster=getDaoMaster();
            }
            daoSession=daoMaster.newSession();
        }
        return daoSession;
    }

    /**
     * 打开输出日志的操作,默认是关闭的
     */
    public void setDebug(){
        QueryBuilder.LOG_SQL=true;
        QueryBuilder.LOG_VALUES=true;
    }
    public void closeDaoSession(){
        if (daoSession != null) {
            daoSession.clear();
            daoSession=null;
        }
    }
    public void closeHelper(){
        if (helper != null) {
            helper.close();
            helper=null;
        }
    }

    /**
     * 关闭所有的操作,数据库开启的时候,使用完毕了必须关闭
     */
    public void closeConnection(){
        closeHelper();
        closeDaoSession();
    }
}

CommonUtils

package com.boradcasst.liuan.greendaodemo.dbmanager;

import android.content.Context;
import android.util.Log;

import com.student.dao.StudentDao;
import com.student.entity.Student;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

/**
 * 完成对某一张表的具体操作 ORM 操作的是对象 Student
 */
public class CommonUtils {
    private DaoManager manager;

    private static final String TAG = "CommonUtils";

    public CommonUtils(Context context) {
        this.manager = DaoManager.getInstance();
        manager.init(context);
    }

    /**
     * 完成对数据中student 表的插入操作
     *
     * @param student
     * @return
     */
    public boolean insertStudent(Student student) {
        boolean flag = false;
        flag = manager.getDaoSession().insert(student) != -1;
        Log.e(TAG, "insertStudent: " + flag);
        return flag;
    }

    /**
     * 同时插入多条记录,需要开辟新的线程
     *
     * @param students
     * @return
     */
    public boolean insertMultStudent(final List<Student> students) {
        boolean flag = false;
        try {
            manager.getDaoSession().runInTx(new Runnable() {
                @Override
                public void run() {
                    for (Student student : students) {
                        manager.getDaoSession().insertOrReplace(student);
                    }
                }
            });
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 完成对student的某一条记录的修改
     *
     * @param student
     * @return
     */
    public boolean updateStudent(Student student) {
        boolean falg = false;
        try {
            manager.getDaoSession().update(student);
            falg = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return falg;
    }

    public boolean deleteStudent(Student student) {
        boolean falg = false;
        try {

            manager.getDaoSession().delete(student);//按照指定的id 进行删除 delete from student where _id=?
            falg = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public boolean deleteAll() {
        boolean falg = false;
        try {

            manager.getDaoSession().deleteAll(Student.class);//删除素有的记录

            falg = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return falg;
    }

    /**
     * 返回多条记录
     *
     * @return
     */
    public List<Student> queryAll() {
        return manager.getDaoSession().loadAll(Student.class);
    }

    /**
     * 按照主键返回单条记录
     *
     * @param key
     * @return
     */
    public Student queryOne(Long key) {
        return manager.getDaoSession().load(Student.class, key);
    }

    public void query1() {
        //使用native sql进行查询操作
        List<Student> list = manager.getDaoSession().queryRaw(Student.class, "where name like ? and _id > ?", new String[]{"%六%", "3"});
        Log.e(TAG, "query1: " + list);
    }

    /**
     * select * from student where name like ? or name =?
     * < <=  !=  in  between and
     * select * from student where age > 23 and adress like "江西"
     */
    public void query2() {
        //使用查询构建器
        QueryBuilder<Student> builder = manager.getDaoSession().queryBuilder(Student.class);
//        逻辑与
        List<Student> list = builder.where(StudentDao.Properties.Age.ge(1)).where(StudentDao.Properties.Address.like("北京")).list();
        Log.e(TAG, "query2: "+list.toString() );
    }

    public void query3(){
        //select * from student where (address ='北京' or age >21) and name like '%张%'
        //逻辑与 和逻辑或 是双目运算符
        QueryBuilder<Student> builder = manager.getDaoSession().queryBuilder(Student.class);
        builder.whereOr(StudentDao.Properties.Address.eq("北京"),StudentDao.Properties.Age.gt(21));
        builder.where(StudentDao.Properties.Name.like("张"));
        builder.whereOr(StudentDao.Properties.Id.ge(new Integer(2)),StudentDao.Properties.Age.ge(21));
        //取前三条数据
        builder.limit(3);
        List<Student> list = builder.list();
        Log.e(TAG, "query3: "+list );
    }
}

MainActivity

package com.boradcasst.liuan.greendaodemo;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.boradcasst.liuan.greendaodemo.dbmanager.CommonUtils;
import com.student.entity.Student;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "MainActivity";
    /**
     * 添加数据
     */
    private Button mBtClick;
    private CommonUtils commonUtils;
    /**
     * 添加数据
     */
    private Button mBtInsert;
    /**
     * 添加多条数据
     */
    private Button mBtInsertMult;
    /**
     * 修改一条数据
     */
    private Button mBtUpdata;
    /**
     * 删除一条数据
     */
    private Button mBtDelete;
    /**
     * 删除所有数据
     */
    private Button mBtDeleteAll;
    /**
     * 查询单条记录
     */
    private Button mBtQuery;
    /**
     * 查询所有记录
     */
    private Button mBtQueryAll;
    /**
     * 使用queryBuilder
     */
    private Button mBtQueryBuilder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initData() {
        commonUtils = new CommonUtils(this);
    }

    private void initView() {
        mBtClick = (Button) findViewById(R.id.bt_insert);
        mBtClick.setOnClickListener(this);
        mBtInsert = (Button) findViewById(R.id.bt_insert);
        mBtInsert.setOnClickListener(this);
        mBtInsertMult = (Button) findViewById(R.id.bt_insert_mult);
        mBtInsertMult.setOnClickListener(this);
        mBtUpdata = (Button) findViewById(R.id.bt_updata);
        mBtUpdata.setOnClickListener(this);
        mBtDelete = (Button) findViewById(R.id.bt_delete);
        mBtDelete.setOnClickListener(this);
        mBtDeleteAll = (Button) findViewById(R.id.bt_delete_all);
        mBtDeleteAll.setOnClickListener(this);
        mBtQuery = (Button) findViewById(R.id.bt_query);
        mBtQuery.setOnClickListener(this);
        mBtQueryAll = (Button) findViewById(R.id.bt_query_all);
        mBtQueryAll.setOnClickListener(this);
        mBtQueryBuilder = (Button) findViewById(R.id.bt_query_builder);
        mBtQueryBuilder.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            //插入数据库
            case R.id.bt_insert:
                insertData();
                break;
            case R.id.bt_insert_mult:
                insertMultData();
                break;
            case R.id.bt_updata:
                updata();
                break;
            case R.id.bt_delete:
                delete();
                break;
            case R.id.bt_delete_all:
                deleteAll();
                break;
            case R.id.bt_query:
                query();
                break;
            case R.id.bt_query_all:
                queryAll();
                break;
            case R.id.bt_query_builder:
                queryBuilder();
                break;
        }
    }

    private void queryBuilder() {
//  commonUtils.query1();
  commonUtils.query3();
        //           commonUtils.query2();
    }

    private void queryAll() {
        List<Student> students = commonUtils.queryAll();
        Log.e(TAG, "queryAll: " + students.toString());
    }

    private void query() {
        Student student = commonUtils.queryOne(1L);
        Log.e(TAG, "query: " + student.toString());
    }

    private void deleteAll() {
        commonUtils.deleteAll();
    }

    private void delete() {
        Student student = new Student();
        student.setId(1231153L);

        commonUtils.deleteStudent(student);
    }

    private void updata() {
        //update student set name='jack' where id=1001;
        Student student = new Student();
        student.setId(1231153L);
        student.setAge(100);
        student.setName("Jack");
        student.setAddress("惠科");
        commonUtils.updateStudent(student);
    }

    private void insertMultData() {
        Log.e(TAG, "insertMultData: ");
        List<Student> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Student student = new Student();
            student.setAddress("山东");
            student.setAge(18);
            student.setName("小六" + i);
            list.add(student);
        }
        commonUtils.insertMultStudent(list);
    }

    private void insertData() {
        Log.e(TAG, "insertData: ");
        Student student1 = getStudent("北京",15,"张三");
        Student student2 = getStudent("山东",20,"李四");
        Student student3 = getStudent("江西",20,"王五");
        Student student4 = getStudent("深圳",25,"小六");
//        student.setId(1231153L);
        commonUtils.insertStudent(student1);
        commonUtils.insertStudent(student2);
        commonUtils.insertStudent(student3);
        commonUtils.insertStudent(student4);
    }

    @NonNull
    private Student getStudent(String adress,int age,String name) {
        Student student = new Student();
        student.setAddress(adress);
        student.setAge(age);
        student.setName(name);
        return student;
    }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

     <Button
        android:id="@+id/bt_insert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加数据" />
     <Button
         android:id="@+id/bt_insert_mult"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="添加多条数据" />
     <Button
         android:id="@+id/bt_updata"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="修改一条数据" />
     <Button
         android:id="@+id/bt_delete"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="删除一条数据" />
     <Button
         android:id="@+id/bt_delete_all"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="删除所有数据" />
     <Button
         android:id="@+id/bt_query"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="查询单条记录" />
     <Button
         android:id="@+id/bt_query_all"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="查询所有记录" />
     <Button
         android:id="@+id/bt_query_builder"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="使用queryBuilder" />
</LinearLayout>

此处遇到了一个坑 greenDao Property '' is not part of

猜你喜欢

转载自blog.csdn.net/mp624183768/article/details/82841320