GreenDao的简单使用

来源:互联网 发布:淘宝助理一键放入仓库 编辑:程序博客网 时间:2024/06/05 06:56

引言

在我们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的一个具体步骤,如有错误请指出,本文参考了一些网上其他文章,如涉及侵权请联系本人,本人将立刻删除