GreenDao的简单使用

引言

在我们Android开发过程中,几乎不可避免的要碰到数据库,通常我们可以使用Android给我们提供的SQLiteOpenHelper类来操作我们的数据库,但据本人的使用经历感觉这种方式真的很蛋疼,主要是他要求我们编写大量的SQL语句,写过的同学都知道的,这玩意儿一不小心就是个坑啊(也许是我太懒太菜,一直不想去系统认真的学习SQL语句),为了规避这种风险,我不得不去找一种不需要写SQL语句的方式来操作数据库,解决的方式便是这篇文章要讨论的对象——GreenDao


GreenDao介绍

简单的讲,GreenDao就是一个处理和操作SQLite数据库的第三方框架,网上有很多关于他的介绍,今天我们主要学习他的用法,就不在此多BB了,诸位自己去网上看吧,话不多说,搞起!

GreenDao的使用方法

1、在我们的项目目录下,与java目录平级出新建一个文件夹green


2、在我们的app这个moudle的build下面按照如下方式添加

虽然刚才说过文件夹名字可以随便取,但是红线处必须和你取得名字一致

3、添加GreenDao的依赖

4、接着我们来新建一个module,按照如下方式:


5、在你刚刚新建的module下面的build.gradle文件出添加依赖

6、编写你新建的module里的generator类,下面直接贴出我的代码供诸位参考

package com.example;

import org.greenrobot.greendao.generator.DaoGenerator;
import org.greenrobot.greendao.generator.Entity;
import org.greenrobot.greendao.generator.Schema;

import java.io.IOException;

public class GreenDaoGenerator {
    public static void main(String[] args) throws Exception {
        //两个参数分别是数据库版本号和数据库名称
        Schema schema = new Schema(1, "mydb.greendao");

        addTable(schema);

        //此处就是指定在你新建的与java平级的文件夹里自动生产代码,后面的路径就是你新建的文件夹的路径
        new DaoGenerator().generateAll(schema,"D:\\ASSpace\\GreenDaoDemo\\app\\src\\main\\green-gen");
    }

    private static void addTable(Schema schema) {
        //添加实体类,其实就是创建一张表,只不过将这张表的所有字段都封装到了这个类中
        Entity person = schema.addEntity("Person");

        person.addIdProperty().autoincrement();//添加id字段并使其自动增长
        person.addStringProperty("name");//给添加name字段
        person.addIntProperty("age");//添加age字段
    }
}

7、执行你的generator类


如果输出如下信息就意味着代码生产成功,你刚刚新建的文件夹里会多出四个类


8、新建你的Application类,官方推荐将数据库的一些初始化操作放在Application里执行

package com.example.machenike.greendaodemo;

import android.app.Application;
import android.database.sqlite.SQLiteDatabase;

import mydb.greendao.DaoMaster;
import mydb.greendao.DaoSession;

/**
 * Created by MACHENIKE on 2017/8/20.
 */

public class MyApplication extends Application{

    public static MyApplication mMyApplication;
    private DaoMaster.DevOpenHelper mOpenHelper;
    private SQLiteDatabase mDatabase;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;

    @Override
    public void onCreate() {
        super.onCreate();

        mMyApplication = this;
        setDatabase();
    }
    private void setDatabase() {
        mOpenHelper = new DaoMaster.DevOpenHelper(this, "person.db", null);

        mDatabase = mOpenHelper.getWritableDatabase();

        mDaoMaster = new DaoMaster(mDatabase);

        mDaoSession = mDaoMaster.newSession();
    }

    public static synchronized MyApplication getInstance(){
        if (mMyApplication==null){
            mMyApplication = new MyApplication();
        }
        return mMyApplication;
    }
    public DaoMaster.DevOpenHelper getOpenHelper(){
        return mOpenHelper;
    }
    public SQLiteDatabase getDataBase(){
        return mDatabase;
    }
    public DaoMaster getMaster(){
        return mDaoMaster;
    }
    public DaoSession getDaoSession(){
        return mDaoSession;
    }
}

9、终于我们可以来操作我们的数据库啦!

此处是布局文件
<?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"
    tools:context="com.example.machenike.greendaodemo.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <EditText
            android:id="@+id/et_id"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="请输入"/>
        <EditText
            android:id="@+id/et_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="请输入姓名"/>
        <EditText
            android:id="@+id/et_age"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="请输入年龄"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/bt_insert"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text=""/>
        <Button
            android:id="@+id/bt_delete"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text=""/>
        <Button
            android:id="@+id/bt_update"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text=""/>
        <Button
            android:id="@+id/bt_query"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text=""/>
    </LinearLayout>
    <ListView
        android:id="@+id/lv_showDB"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</LinearLayout>

下面是在activity里面的操作

package com.example.machenike.greendaodemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import mydb.greendao.Person;
import mydb.greendao.PersonDao;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.et_id)
    EditText mEtId;
    @BindView(R.id.et_name)
    EditText mEtName;
    @BindView(R.id.et_age)
    EditText mEtAge;
    @BindView(R.id.lv_showDB)
    ListView mLvShowDB;
    private PersonDao mPersonDao;
    private MyAdapter mMyAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        mPersonDao = MyApplication.getInstance().getDaoSession().getPersonDao();

        mMyAdapter = new MyAdapter();

        mLvShowDB.setAdapter(mMyAdapter);

    }

    @OnClick({R.id.bt_insert, R.id.bt_delete, R.id.bt_update, R.id.bt_query})
    public void onViewClicked(View view) {
        String id = mEtId.getText().toString();
        String name = mEtName.getText().toString();
        String age = mEtAge.getText().toString();
        boolean isNotEmpty = !TextUtils.isEmpty(id)&&!TextUtils.isEmpty(name)&&!TextUtils.isEmpty(age);
        switch (view.getId()) {
            case R.id.bt_insert:
                if (isNotEmpty){
                    Person person = new Person(null, name, Integer.parseInt(age));
                    mPersonDao.insert(person);

                    mEtId.setText(null);
                    mEtName.setText(null);
                    mEtAge.setText(null);

                }else {
                    Toast.makeText(this,"输入框为不能为空!",Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.bt_delete:
                //mPersonDao.delete(new Person((long) 1));
                mPersonDao.deleteAll();
                break;
            case R.id.bt_update:
                if (isNotEmpty){
                    Person person = new Person((long) Integer.parseInt(id), name, Integer.parseInt(age));
                    mPersonDao.update(person);

                    mEtId.setText(null);
                    mEtName.setText(null);
                    mEtAge.setText(null);

                }else {
                    Toast.makeText(this,"输入框为不能为空!",Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.bt_query:
                List<Person> personList= mPersonDao.queryRaw("",new String[]{});
                mMyAdapter.add(personList);
                break;
        }
    }
}
 

10、运行结果如下



总结:

以上就是我使用GreenDao的一个具体步骤,如有错误请指出,本文参考了一些网上其他文章,如涉及侵权请联系本人,本人将立刻删除


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值