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