-
1. greenDao的使用步骤:
第一步: 在项目的.gradle文件里面添加
buildscript { repositories { mavenCentral() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.0' classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } }
第二步:在moddle的.gradle文件里面添加
-
apply plugin: 'org.greenrobot.greendao' android { compileSdkVersion 26 defaultConfig { applicationId "com.example.administrator.myapplication" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } // greendao{ // schemaVersion 2 // schemaVersion 2 //数据库版本号 // daoPackage 'com.dianchou.dcw.recorddb'// 设置DaoMaster、DaoSession、Dao 包名 // targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录 // } greendao { schemaVersion 1 daoPackage 'com.example.administrator.myapplication.recorddb' targetGenDir 'src/main/java' } }
依赖里面添加:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:0.5' androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2' implementation 'com.android.support:appcompat-v7:26.1.0' //数据库 compile 'org.greenrobot:greendao:3.0.1' compile 'org.greenrobot:greendao-generator:3.0.0' }
第三步: 添加Bean类,用User举例子 , 一定要记得注解@Entity
@Entity
public class User {
@Id(autoincrement = true)//设置自增长
private Long id;
@Index(unique = true)//设置唯一性
private String perNo;//人员编号
private String name;//人员姓名
private String sex;//人员姓名
}
第四步: 编译项目,User实体类会自动编译,生成get、set方法并且会在com.example.john.greendaodemo.gen目录下生成三个文件;在我们Make Project后,实体内的变化如下所示:
@Entity
public class PersonInfor {
@Id(autoincrement = true)//设置自增长
private Long id;
@Index(unique = true)//设置唯一性
private String perNo;//人员编号
private String name;//人员姓名
private String sex;//人员姓名
@Generated(hash = 1311768890)
public PersonInfor(Long id, String perNo, String name, String sex) {
this.id = id;
this.perNo = perNo;
this.name = name;
this.sex = sex;
}
@Generated(hash = 1362534400)
public PersonInfor() {
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getPerNo() {
return this.perNo;
}
public void setPerNo(String perNo) {
this.perNo = perNo;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
-
2.封装数据库操作类
一 .因为我们对数据库的操作无非就是增删改查四个操作,所以我们将他们简单封装一下。
-
public class DbController { /** * Helper */ private DaoMaster.DevOpenHelper mHelper;//获取Helper对象 /** * 数据库 */ private SQLiteDatabase db; /** * DaoMaster */ private DaoMaster mDaoMaster; /** * DaoSession */ private DaoSession mDaoSession; /** * 上下文 */ private Context context; /** * dao */ private PersonInforDao personInforDao; private static DbController mDbController; /** * 获取单例 */ public static DbController getInstance(Context context){ if(mDbController == null){ synchronized (DbController.class){ if(mDbController == null){ mDbController = new DbController(context); } } } return mDbController; } /** * 初始化 * @param context */ public DbController(Context context) { this.context = context; mHelper = new DaoMaster.DevOpenHelper(context,"person.db", null); mDaoMaster =new DaoMaster(getWritableDatabase()); mDaoSession = mDaoMaster.newSession(); personInforDao = mDaoSession.getPersonInforDao(); } /** * 获取可读数据库 */ private SQLiteDatabase getReadableDatabase(){ if(mHelper == null){ mHelper = new DaoMaster.DevOpenHelper(context,"person.db",null); } SQLiteDatabase db =mHelper.getReadableDatabase(); return db; } /** * 获取可写数据库 * @return */ private SQLiteDatabase getWritableDatabase(){ if(mHelper == null){ mHelper =new DaoMaster.DevOpenHelper(context,"person.db",null); } SQLiteDatabase db = mHelper.getWritableDatabase(); return db; } /** * 会自动判定是插入还是替换 * @param personInfor */ public void insertOrReplace(PersonInfor personInfor){ personInforDao.insertOrReplace(personInfor); } /**插入一条记录,表里面要没有与之相同的记录 * * @param personInfor */ public long insert(PersonInfor personInfor){ return personInforDao.insert(personInfor); } /** * 更新数据 * @param personInfor */ public void update(PersonInfor personInfor){ PersonInfor mOldPersonInfor = personInforDao.queryBuilder().where(PersonInforDao.Properties.Id.eq(personInfor.getId())).build().unique();//拿到之前的记录 if(mOldPersonInfor !=null){ mOldPersonInfor.setName("张三"); personInforDao.update(mOldPersonInfor); } } /** * 按条件查询数据 */ public List<PersonInfor> searchByWhere(String wherecluse){ List<PersonInfor>personInfors = (List<PersonInfor>) personInforDao.queryBuilder().where(PersonInforDao.Properties.Name.eq(wherecluse)).build().unique(); return personInfors; } /** * 查询所有数据 */ public List<PersonInfor> searchAll(){ List<PersonInfor>personInfors=personInforDao.queryBuilder().list(); return personInfors; } /** * 删除数据 */ public void delete(String wherecluse){ personInforDao.queryBuilder().where(PersonInforDao.Properties.Name.eq(wherecluse)).buildDelete().executeDeleteWithoutDetachingEntities(); }
二. 看看我们的MainActivity
-
public class MainActivity extends AppCompatActivity { private Button Add,Delete,Update,Search; private DbController mDbController; private PersonInfor personInfor1,personInfor2,personInfor3,personInfor4; private long insertTipId; private TextView dataArea; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDbController = DbController.getInstance(MainActivity.this); initView(); Envent(); similateData(); } private void similateData() { personInfor1 = new PersonInfor(null,"001","王大宝","男"); personInfor2 = new PersonInfor(null,"002","李晓丽","女"); personInfor3 = new PersonInfor(null,"003","王麻麻","男"); personInfor4 = new PersonInfor(null,"004","王大锤","女"); } private void Envent() { Add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Add mDbController.insertOrReplace(personInfor1); mDbController.insertOrReplace(personInfor2); mDbController.insertOrReplace(personInfor3); mDbController.insertOrReplace(personInfor4); showDataList(); } }); Delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Delete mDbController.delete("王麻麻"); showDataList(); } }); Update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Update mDbController.update(personInfor1); showDataList(); } }); Search.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Search showDataList(); } }); } private void showDataList() { StringBuilder sb = new StringBuilder(); List<PersonInfor>personInfors = mDbController.searchAll(); for(PersonInfor personInfor:personInfors){ // dataArea.setText("id:"+p); sb.append("id:").append(personInfor.getId()) .append("perNo:").append(personInfor.getPerNo()) .append("name:").append(personInfor.getName()) .append("sex:").append(personInfor.getSex()) .append("\n"); } dataArea.setText(sb.toString()); } private void initView() { Add = findViewById(R.id.Add); Delete = findViewById(R.id.Delete); Update = findViewById(R.id.Update); Search = findViewById(R.id.Search); dataArea= findViewById(R.id.tips); } }