greendao3.0以上使用步骤(一):基础使用

本文介绍了greendao的基础入门使用:其中包括数据库的增删改查,基本使用功能,简单方便,易懂。
优势:

1:性能最大化

2:内存开销最小

3:API 简单好用

4:对Android 高度优化

5:2.2版本以上还支持加密数据库

6:支持protobuf协议存储(protobuf 比json更快,google的优秀产品,因此greendao能很好地与retrofit 2.0结合protobuf网络请求并缓存)


  由于现在手中的项目需要用到数据库来存储数据,听说greendao现在很流行,于是就想学习一下,在网上找了很多,
  但是水平有限,好多大神写的看不懂啊!不知道啥意思,于是就找呀找,最后,找到一篇翻译外文的简书,哇哦,终于学会了,不过下班了,
  现在忘记是谁写的了,无法添加你的信息了,不过还是要谢谢你的译文哦!
那么我就来总结一下,小白使用greendao的步骤吧!哈哈
欢迎大家给出建议、更好的方法和知识哦,谢谢啦!

 那好直接来吧!

先看效果
这里写图片描述

步骤一、在自己的build.gradle中加入这些配置

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
    }
}
apply plugin: 'org.greenrobot.greendao'

greendao {
    //数据库的schema版本,也可以理解为数据库版本号
    schemaVersion 1
    //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。
    daoPackage 'cn.hnshangyu.testgreendao.greendao'
    //设置DaoMaster、DaoSession、Dao目录
    targetGenDir 'src/main/java'
}
dependencies {
    compile 'org.greenrobot:greendao:3.2.0'
}

针对于daoPackage 我的项目内容如下
这里写图片描述

步骤二、创建Student实体类

package cn.hnshangyu.testgreendao.bean;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Keep;

@Entity(generateConstructors = false)
    public class Student {  
        @Id
        private Long id;  
        private String name;
        private int age;  

        public Student() {  
        }  

        @Keep
        public Student(String name, int age) {  
            this.name = name;  
            this.age = age;  
        }  


        public Student(Long id, String name, int age) {  
            this.id = id;  
            this.name = name;  
            this.age = age;  
        }  

        @Keep  
        public Long getId() {  
            return id;  
        }  

        @Keep  
        public void setId(Long id) {  
            this.id = id;  
        }  

        @Keep  
        public String getName() {  
            return name;  
        }  

        @Keep  
        public void setName(String name) {  
            this.name = name;  
        }  

        @Keep  
        public int getAge() {  
            return age;  
        }  

        @Keep  
        public void setAge(int age) {  
            this.age = age;  
        }  

        @Keep  
        @Override  
        public boolean equals(Object o) {  
            if (this == o) return true;  
            if (!(o instanceof Student)) return false;  

            Student student = (Student) o;  

            return name.equals(student.name);  

        }  

        @Keep  
        @Override  
        public int hashCode() {  
            return (int) (id ^ (id >>> 32));  
        }  

        @Keep  
        @Override  
        public String toString() {  
            return "Student{" +  
                    "id=" + id +  
                    ", name='" + name + '\'' +  
                    ", age=" + age +  
                    '}';  
        }  
    }  

步骤三、修复一下工程,自动生成greendao包下的类(就是点击一下小锤子),你会自动生成上图中greendao包中的类。

步骤四、开始使用,创建管理类

package cn.hnshangyu.testgreendao.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import cn.hnshangyu.testgreendao.greendao.DaoMaster;
import cn.hnshangyu.testgreendao.greendao.DaoSession;

public class DbManager {

    // 是否加密
    public static final boolean ENCRYPTED = true;

    private static final String DB_NAME = "test.db";
    private static DbManager mDbManager;
    private static DaoMaster.DevOpenHelper mDevOpenHelper;
    private static DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;

    private Context mContext;

    private DbManager(Context context) {
        this.mContext = context;
        // 初始化数据库信息
        mDevOpenHelper = new DaoMaster.DevOpenHelper(context, DB_NAME);
        getDaoMaster(context);
        getDaoSession(context);
    }

    public static DbManager getInstance(Context context) {
        if (null == mDbManager) {
            synchronized (DbManager.class) {
                if (null == mDbManager) {
                    mDbManager = new DbManager(context);
                }
            }
        }
        return mDbManager;
    }

    /**
     * 获取可读数据库
     *
     * @param context
     * @return
     */
    public static SQLiteDatabase getReadableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }
        return mDevOpenHelper.getReadableDatabase();
    }

    /**
     * 获取可写数据库
     *
     * @param context
     * @return
     */
    public static SQLiteDatabase getWritableDatabase(Context context) {
        if (null == mDevOpenHelper) {
            getInstance(context);
        }

        return mDevOpenHelper.getWritableDatabase();
    }

    /**
     * 获取DaoMaster
     *
     * @param context
     * @return
     */
    public static DaoMaster getDaoMaster(Context context) {
        if (null == mDaoMaster) {
            synchronized (DbManager.class) {
                if (null == mDaoMaster) {
                    mDaoMaster = new DaoMaster(getWritableDatabase(context));
                }
            }
        }
        return mDaoMaster;
    }

    /**
     * 获取DaoSession
     *
     * @param context
     * @return
     */
    public static DaoSession getDaoSession(Context context) {
        if (null == mDaoSession) {
            synchronized (DbManager.class) {
                mDaoSession = getDaoMaster(context).newSession();
            }
        }

        return mDaoSession;
    }
}

步骤五、增删改查,

package cn.hnshangyu.testgreendao.db;

import android.content.Context;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

import cn.hnshangyu.testgreendao.bean.Student;

public class StudentDaoOpe {

    /**
     * 添加数据至数据库
     *
     * @param context
     * @param stu
     */
    public static void insertData(Context context, Student stu) {

        DbManager.getDaoSession(context).getStudentDao().insert(stu);
    }


    /**
     * 将数据实体通过事务添加至数据库
     *
     * @param context
     * @param list
     */
    public static void insertData(Context context, List<Student> list) {
        if (null == list || list.size() <= 0) {
            return;
        }
        DbManager.getDaoSession(context).getStudentDao().insertInTx(list);
    }

    /**
     * 添加数据至数据库,如果存在,将原来的数据覆盖
     * 内部代码判断了如果存在就update(entity);不存在就insert(entity);
     *
     * @param context
     * @param student
     */
    public static void saveData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().save(student);
    }

    /**
     * 删除数据至数据库
     *
     * @param context
     * @param student 删除具体内容
     */
    public static void deleteData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().delete(student);
    }

    /**
     * 根据id删除数据至数据库
     *
     * @param context
     * @param id      删除具体内容
     */
    public static void deleteByKeyData(Context context, long id) {
        DbManager.getDaoSession(context).getStudentDao().deleteByKey(id);
    }

    /**
     * 删除全部数据
     *
     * @param context
     */
    public static void deleteAllData(Context context) {
        DbManager.getDaoSession(context).getStudentDao().deleteAll();
    }

    /**
     * 更新数据库
     *
     * @param context
     * @param student
     */
    public static void updateData(Context context, Student student) {
        DbManager.getDaoSession(context).getStudentDao().update(student);
    }

    /**
     * 查询所有数据
     *
     * @param context
     * @return
     */
    public static List<Student> queryAll(Context context) {
        QueryBuilder<Student> builder = DbManager.getDaoSession(context).getStudentDao().queryBuilder();

        return builder.build().list();
    }

/**
     * 根据id,其他的字段类似
     *
     * @param context
     * @param id
     * @return
     */
    public static List<Student> queryForId(Context context, long id) {
        QueryBuilder<Student> builder = DbManager.getDaoSession(context).getStudentDao().queryBuilder();
        /**
         * 返回当前id的数据集合,当然where(这里面可以有多组,做为条件);
         * 这里build.list();与where(StudentDao.Properties.Id.eq(id)).list()结果是一样的;
         * 在QueryBuilder类中list()方法return build().list();
         *
         */
        // Query<Student> build = builder.where(StudentDao.Properties.Id.eq(id)).build();
        // List<Student> list = build.list();
        return builder.where(StudentDao.Properties.Id.eq(id)).list();
    }
}

步骤六、mainactivity布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="cn.hnshangyu.testgreendao.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/add"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="增" />

        <Button
            android:id="@+id/delete"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="删" />

        <Button
            android:id="@+id/updata"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="改" />

        <Button
            android:id="@+id/check"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="查" />


    </LinearLayout>

    <Button
        android:id="@+id/deleteAll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_weight="1"
        android:text="删除全部" />

    <Button
        android:id="@+id/check_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/deleteAll"
        android:layout_centerInParent="true"
        android:text="根据id查" />

</RelativeLayout>

步骤七、mainActivity

package cn.hnshangyu.testgreendao;

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

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

import butterknife.ButterKnife;
import butterknife.InjectView;
import cn.hnshangyu.testgreendao.bean.Student;
import cn.hnshangyu.testgreendao.db.StudentDaoOpe;

public class MainActivity extends AppCompatActivity {

    @InjectView(R.id.add)
    Button add;
    @InjectView(R.id.delete)
    Button delete;
    @InjectView(R.id.updata)
    Button updata;
    @InjectView(R.id.check)
    Button check;
    @InjectView(R.id.deleteAll)
    Button deleteAll;
    @InjectView(R.id.check_id)
    Button checkId;

    private Context mContext;
    private Student student;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
        mContext = this;
        initData();
        initListener();

    }

    private List<Student> studentList = new ArrayList<>();

    /**
     * 初始化数据
     */
    private void initData() {
        for (int i = 0; i < 100; i++) {
            student = new Student((long) i, "huang" + i, 25);
            studentList.add(student);
        }

    }

    private void initListener() {
        /**
         *增
         */
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StudentDaoOpe.insertData(mContext, studentList);
            }
        });
        /**
         * 删
         */
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Student student = new Student((long) 5, "haung" + 5, 25);
                /**
                 * 根据特定的对象删除
                 */
                StudentDaoOpe.deleteData(mContext, student);
                /**
                 * 根据主键删除
                 */
                StudentDaoOpe.deleteByKeyData(mContext, 7);
            }
        });
        /**
         *删除所有
         */
        deleteAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StudentDaoOpe.deleteAllData(mContext);
            }
        });
        /**
         * 更新
         */
        updata.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Student student = new Student((long) 2, "haungxiaoguo", 16516);
                StudentDaoOpe.updateData(mContext, student);
            }
        });
        /**
         * 查询全部
         */
        check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<Student> students = StudentDaoOpe.queryAll(mContext);
                for (int i = 0; i < students.size(); i++) {
                    Log.i("Log", students.get(i).getName());
                }
            }
        });
        /**
         * 根据id查询
         */
        checkId.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<Student> students = StudentDaoOpe.queryForId(mContext, 50);
                for (int i = 0; i < students.size(); i++) {
                    Log.i("Log", students.get(i).getName());
                }
            }
        });
    }
}

下面就是效果了

点击“增”->“查”出现
这里写图片描述

点击“删”->“查”出现

这里写图片描述

huang5与huang7被删除了

点击“改”->“查”出现
这里写图片描述

huang2被修改成huangxiaoguo了

点击“根据ID查”
这里写图片描述

查询结果只有huang50

greendao中的注解

(一) @Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新
(二) @Id
(三) @NotNull 不为null
(四) @Unique 唯一约束
(五) @ToMany 一对多
(六) @OrderBy 排序
(七) @ToOne 一对一
(八) @Transient 不存储在数据库中
(九) @generated 由greendao产生的构造函数或方法

这样以后用着就方便了,哈哈哈~~~

关于数据库的更新请看下一篇:greendao3.0以上使用步骤(二):数据库到底该怎么升级

Greendao的模糊查询需要对传人的值前后加”%”,如:”%”+value+”%”;

Greendao模糊查询like方法的使用:like(“%你想匹配的%”);

1、例如:

QueryBuilder<Shops> qb = words_Dao.queryBuilder();
qb.where(Properties.Shops_id.like("%"+"你需要搜的"+"%"));

2、分页加载:

   /**
     * 查询所有数据
     *  分页加载
     * @param context
     * @param pageSize 当前第几页
     * @param pageNum  每页显示多少个
     * @return
     */
    public static List<BaseRecordStation> queryAll(Context context, int pageSize, int pageNum) {
        QueryBuilder<BaseRecordStation> builder = DbManager.getDaoSession(context, DB_NAME).getBaseRecordStationDao().queryBuilder();
        List<BaseRecordStation> list = builder
                .offset(pageSize - 1)//从0开始的
                .limit(pageNum)
                .orderDesc(BaseRecordStationDao.Properties.Id)
                .build()
                .list();
        return list;
    }
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要使用SQLitestudio打开GreenDAO加密数据库,需要按照以下步骤进行: 1. 首先,确保你已经安装了SQLitestudio,可以从官方网站下载并安装。 2. 打开SQLitestudio并点击"文件"菜单,选择"打开数据库"选项。 3. 在打开的对话框中,浏览文件系统并选择你要打开的GreenDAO加密数据库文件,然后点击"打开"按钮。 4. 在"解密数据库"对话框中,输入你设置的GreenDAO数据库的加密密码,并确保"使用GreenDAO加密"选项被选中。 5. 点击"确定"按钮,SQLitestudio会尝试用你提供的密码解密数据库文件。 6. 如果密码正确,数据库将被成功解密并显示在SQLitestudio的主窗口中。 7. 现在你可以对数据库进行各种操作了,比如查看表结构、查询数据等。 需要注意的是,SQLitestudio虽然可以打开和操作GreenDAO加密数据库,但它并不直接支持GreenDAO的特定功能,比如自动生成的实体类和数据访问对象(DAO)。如果你需要使用这些功能,建议使用GreenDAO提供的自动生成工具和API来操作数据库。 ### 回答2: 要使用SqliteStudio打开GreenDAO加密数据库,需要按照以下步骤进行操作: 1. 首先,下载并安装SqliteStudio软件,确保已经在计算机上正确安装并启动。 2. 打开SqliteStudio,点击菜单栏中的“数据库”选项,选择“连接到数据库”。 3. 在弹出的对话框中,选择“SQLite”作为数据库类型,然后点击“继续”。 4. 在“数据库文件”字段中,浏览到保存加密数据库的文件路径,并选择要打开的GreenDAO加密数据库文件。 5. 在“密码”字段中,输入用于加密数据库的密码。确保密码与原始数据库加密方式一致,否则无法正确打开。 6. 在“配置文件”字段中,选择相应的配置文件,如果没有则选择“默认配置”。 7. 点击“测试连接”按钮,确保连接设置正确,如果测试通过则点击“连接”。 8. 等待一段时间,SqliteStudio将连接到GreenDAO加密数据库,并在左侧的导航栏中显示数据库的表和视图。 9. 现在,可以浏览和编辑数据库中的表和数据,执行自定义的SQL查询等操作。 10. 在使用完毕后,记得点击SqliteStudio菜单栏中的“断开连接”选项,以确保数据库的同步和安全关闭。 总结:通过以上步骤,我们就可以使用SqliteStudio打开GreenDAO加密数据库。请注意,这些步骤仅适用于已加密的GreenDAO数据库,如果数据库没有加密或使用其他加密方式,则无法通过这种方式打开。 ### 回答3: 要使用SQLiteStudio打开GreenDao加密的数据库,需要按照以下步骤操作: 1. 确保已经安装并启动SQLiteStudio软件。 2. 打开SQLiteStudio软件后,点击菜单栏中的“文件”,选择“打开数据库”选项。 3. 在弹出的对话框中,选择要打开的加密数据库文件,点击“打开”。 4. 然后,弹出的对话框会要求输入数据库密码。输入正确的密码,点击“确定”。 5. 如果密码正确,SQLiteStudio将会打开该加密数据库,并显示其中的表格和数据。 注意事项: - 确保输入的密码正确,否则将无法打开加密数据库。 - 如果忘记了数据库密码,无法使用SQLiteStudio直接打开数据库,除非通过其他方式找回密码或者重新创建一个未加密的数据库。 希望以上步骤能对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值