标签:width pack lease aos mave inf tail writable 调用
使用:
1、在build.gradle中添加
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() mavenCentral() // add repository GreenDao } dependencies { classpath "com.android.tools.build:gradle:4.1.3" classpath ‘org.greenrobot:greendao-gradle-plugin:3.3.0‘ // add plugin GreenDao // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
2、在app包的build.gradle中
plugins {
id ‘com.android.application‘
id ‘org.greenrobot.greendao‘ // apply plugin
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.mygreendao"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt‘), ‘proguard-rules.pro‘
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
greendao {
//数据库的schema版本,也可以理解为数据库版本号
schemaVersion 1
//设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。
daoPackage ‘com.example.mygreendao.greendao‘
//设置DaoMaster、DaoSession、Dao目录
targetGenDir ‘src/main/java‘
}
}
dependencies {
implementation ‘androidx.appcompat:appcompat:1.1.0‘
implementation ‘com.google.android.material:material:1.1.0‘
implementation ‘androidx.constraintlayout:constraintlayout:1.1.3‘
testImplementation ‘junit:junit:4.+‘
androidTestImplementation ‘androidx.test.ext:junit:1.1.1‘
androidTestImplementation ‘androidx.test.espresso:espresso-core:3.2.0‘
//GreenDao
implementation ‘org.greenrobot:greendao:3.3.0‘ // add library
}
项目内容如下图:

3、创建Student实体类
package com.example.mygreendao.bean;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;
@Entity
public class Student {
@Id(autoincrement = true)//自增ID
private Long id;
private String name;
private int age;
//有参构造
@Generated(hash = 352757281)
public Student(Long id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
//无参构造
@Generated(hash = 1556870573)
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
}
4、修复一下工程,自动生成greendao包下的类(就是点击一下小锤子),你会自动生成上图中greendao包中的类。
5、开始使用,创建管理类
package com.example.mygreendao.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.example.mygreendao.greendao.DaoMaster;
import com.example.mygreendao.greendao.DaoSession;
public class DbManager {
//数据库名称
private static final String DB_NAME = "test.db";
private Context mContext;//上下文
private static DbManager mDbManager;
private static DaoMaster.DevOpenHelper mDevOpenHelper;
private static DaoMaster mDaoMaster;
private static DaoSession mDaoSession;
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;
}
}
6、增删改查
package com.example.mygreendao.db;
import android.content.Context;
import com.example.mygreendao.bean.Student;
import com.example.mygreendao.greendao.StudentDao;
import org.greenrobot.greendao.query.QueryBuilder;
import java.util.List;
public class StudentDaoOpen {
/**
* 添加数据至数据库
* @param context
* @param student
*/
public static void insertData(Context context, Student student){
DbManager.getDaoSession(context).getStudentDao().insert(student);
}
/**
* 将数据实体通过事务添加至数据库
* @param context
* @param list
*/
public static void inserData(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();
}
}
7、布局文件
<?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=".MainActivity">
<Button
android:id="@+id/add"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="增" />
<Button
android:id="@+id/delete"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="删" />
<Button
android:id="@+id/updata"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="改" />
<Button
android:id="@+id/check"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="查" />
<Button
android:id="@+id/deleteAll"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="删除全部" />
<Button
android:id="@+id/check_id"
android:layout_width="match_parent"
android:layout_height="40dp"
android:text="根据id查" />
</LinearLayout>
8、调用
package com.example.mygreendao;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.example.mygreendao.bean.Student;
import com.example.mygreendao.db.StudentDaoOpen;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Context mContext;
private Button add;
private Button delete;
private Button updata;
private Button check;
private Button deleteAll;
private Button check_id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
add = findViewById(R.id.add);
add.setOnClickListener(this);
delete = findViewById(R.id.delete);
delete.setOnClickListener(this);
updata = findViewById(R.id.updata);
updata.setOnClickListener(this);
check = findViewById(R.id.check);
check.setOnClickListener(this);
deleteAll = findViewById(R.id.deleteAll);
deleteAll.setOnClickListener(this);
check_id = findViewById(R.id.check_id);
check_id.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.add://添加
Student student = new Student("张三",12);
StudentDaoOpen.insertData(mContext,student);
Student student2 = new Student("李四",16);
StudentDaoOpen.insertData(mContext,student2);
Student student20 = new Student("王五",18);
StudentDaoOpen.insertData(mContext,student20);
break;
case R.id.delete://删除
Student student3 = new Student((long)4,"张三",12);
StudentDaoOpen.deleteData(mContext,student3);
break;
case R.id.updata://修改
Student student4 = new Student((long) 5,"李四",20);
StudentDaoOpen.updateData(mContext, student4);
break;
case R.id.check://查询
List<Student> students = StudentDaoOpen.queryAll(mContext);
for (int i = 0; i < students.size(); i++) {
Log.i("Log", "Id:"+students.get(i).getId()+" ,姓名:"+students.get(i).getName()+" ,年龄:"+students.get(i).getAge());
}
break;
case R.id.deleteAll://删除全部
StudentDaoOpen.deleteAllData(mContext);
break;
case R.id.check_id://根据ID查询
List<Student> students1 = StudentDaoOpen.queryForId(mContext, 6);
for (int i = 0; i < students1.size(); i++) {
Log.i("Log", "Id:"+students1.get(i).getId()+" ,姓名:"+students1.get(i).getName()+" ,年龄:"+students1.get(i).getAge());
}
break;
}
}
}
结束
参考于:
https://blog.csdn.net/huangxiaoguo1/article/details/52916189
https://blog.csdn.net/bskfnvjtlyzmv867/article/details/71250101
标签:width pack lease aos mave inf tail writable 调用
原文地址:https://www.cnblogs.com/changyiqiang/p/14774763.html