我把这个demo 发布到了git 上 我要去看看
需要可以去下载
我们需要对 greenDao做二次封装 以便于使用
新建 dbmanager 文件 里面分别存放 CommonUtils DaoManager
DaoManager 有四个作用
/**
* 1 创建数据库
* 2 创建数据库的表
* 3 包含对数据库的CRUD
* 4 对数据的升级
*/
CommonUtils
完成对某一张表的具体操作 ORM 操作的是对象 Student
再次强调一下 对象操作就是数据库操作 而类名就是表名 所以表名为SUDENT
属性名称为字段名称
java-gen是用生成器生成的所以此处我就不再贴了
DaoManager
package com.boradcasst.liuan.greendaodemo.dbmanager;
import android.content.Context;
import com.student.dao.DaoMaster;
import com.student.dao.DaoSession;
import org.greenrobot.greendao.query.QueryBuilder;
/**
* 1 创建数据库
* 2 创建数据库的表
* 3 包含对数据库的CRUD
* 4 对数据的升级
*/
public class DaoManager {
private static final String TAG = "DbManager";
private static final String DB_NAME = "mydb.sqlite";//数据库名称
private volatile static DaoManager manager;//多线程访问
private static DaoMaster.DevOpenHelper helper;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
private Context context;
/**
* 使用单例模式 获得操作数据库的对象
* @return
*/
public void init(Context context){
this.context=context;
}
public static DaoManager getInstance() {
DaoManager instance = null;
if (manager == null) {
synchronized (DaoManager.class) {
if (instance == null) {
instance = new DaoManager();
manager = instance;
}
}
}
return instance;
}
/**
* 判断是否有存在数据库 如果没有则创建数据库
* @return
*/
public DaoMaster getDaoMaster(){
if(daoMaster==null){
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
daoMaster=new DaoMaster(devOpenHelper.getWritableDatabase());
}
return daoMaster;
}
/**
* 完成对数据库的添加 删除 修改 查询的操作 仅仅是一个接口
* @return
*/
public DaoSession getDaoSession(){
if (daoSession == null) {
if (daoMaster == null) {
daoMaster=getDaoMaster();
}
daoSession=daoMaster.newSession();
}
return daoSession;
}
/**
* 打开输出日志的操作,默认是关闭的
*/
public void setDebug(){
QueryBuilder.LOG_SQL=true;
QueryBuilder.LOG_VALUES=true;
}
public void closeDaoSession(){
if (daoSession != null) {
daoSession.clear();
daoSession=null;
}
}
public void closeHelper(){
if (helper != null) {
helper.close();
helper=null;
}
}
/**
* 关闭所有的操作,数据库开启的时候,使用完毕了必须关闭
*/
public void closeConnection(){
closeHelper();
closeDaoSession();
}
}
CommonUtils
package com.boradcasst.liuan.greendaodemo.dbmanager;
import android.content.Context;
import android.util.Log;
import com.student.dao.StudentDao;
import com.student.entity.Student;
import org.greenrobot.greendao.query.QueryBuilder;
import java.util.List;
/**
* 完成对某一张表的具体操作 ORM 操作的是对象 Student
*/
public class CommonUtils {
private DaoManager manager;
private static final String TAG = "CommonUtils";
public CommonUtils(Context context) {
this.manager = DaoManager.getInstance();
manager.init(context);
}
/**
* 完成对数据中student 表的插入操作
*
* @param student
* @return
*/
public boolean insertStudent(Student student) {
boolean flag = false;
flag = manager.getDaoSession().insert(student) != -1;
Log.e(TAG, "insertStudent: " + flag);
return flag;
}
/**
* 同时插入多条记录,需要开辟新的线程
*
* @param students
* @return
*/
public boolean insertMultStudent(final List<Student> students) {
boolean flag = false;
try {
manager.getDaoSession().runInTx(new Runnable() {
@Override
public void run() {
for (Student student : students) {
manager.getDaoSession().insertOrReplace(student);
}
}
});
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 完成对student的某一条记录的修改
*
* @param student
* @return
*/
public boolean updateStudent(Student student) {
boolean falg = false;
try {
manager.getDaoSession().update(student);
falg = true;
} catch (Exception e) {
e.printStackTrace();
}
return falg;
}
public boolean deleteStudent(Student student) {
boolean falg = false;
try {
manager.getDaoSession().delete(student);//按照指定的id 进行删除 delete from student where _id=?
falg = true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public boolean deleteAll() {
boolean falg = false;
try {
manager.getDaoSession().deleteAll(Student.class);//删除素有的记录
falg = true;
} catch (Exception e) {
e.printStackTrace();
}
return falg;
}
/**
* 返回多条记录
*
* @return
*/
public List<Student> queryAll() {
return manager.getDaoSession().loadAll(Student.class);
}
/**
* 按照主键返回单条记录
*
* @param key
* @return
*/
public Student queryOne(Long key) {
return manager.getDaoSession().load(Student.class, key);
}
public void query1() {
//使用native sql进行查询操作
List<Student> list = manager.getDaoSession().queryRaw(Student.class, "where name like ? and _id > ?", new String[]{"%六%", "3"});
Log.e(TAG, "query1: " + list);
}
/**
* select * from student where name like ? or name =?
* < <= != in between and
* select * from student where age > 23 and adress like "江西"
*/
public void query2() {
//使用查询构建器
QueryBuilder<Student> builder = manager.getDaoSession().queryBuilder(Student.class);
// 逻辑与
List<Student> list = builder.where(StudentDao.Properties.Age.ge(1)).where(StudentDao.Properties.Address.like("北京")).list();
Log.e(TAG, "query2: "+list.toString() );
}
public void query3(){
//select * from student where (address ='北京' or age >21) and name like '%张%'
//逻辑与 和逻辑或 是双目运算符
QueryBuilder<Student> builder = manager.getDaoSession().queryBuilder(Student.class);
builder.whereOr(StudentDao.Properties.Address.eq("北京"),StudentDao.Properties.Age.gt(21));
builder.where(StudentDao.Properties.Name.like("张"));
builder.whereOr(StudentDao.Properties.Id.ge(new Integer(2)),StudentDao.Properties.Age.ge(21));
//取前三条数据
builder.limit(3);
List<Student> list = builder.list();
Log.e(TAG, "query3: "+list );
}
}
MainActivity
package com.boradcasst.liuan.greendaodemo;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.boradcasst.liuan.greendaodemo.dbmanager.CommonUtils;
import com.student.entity.Student;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
/**
* 添加数据
*/
private Button mBtClick;
private CommonUtils commonUtils;
/**
* 添加数据
*/
private Button mBtInsert;
/**
* 添加多条数据
*/
private Button mBtInsertMult;
/**
* 修改一条数据
*/
private Button mBtUpdata;
/**
* 删除一条数据
*/
private Button mBtDelete;
/**
* 删除所有数据
*/
private Button mBtDeleteAll;
/**
* 查询单条记录
*/
private Button mBtQuery;
/**
* 查询所有记录
*/
private Button mBtQueryAll;
/**
* 使用queryBuilder
*/
private Button mBtQueryBuilder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
commonUtils = new CommonUtils(this);
}
private void initView() {
mBtClick = (Button) findViewById(R.id.bt_insert);
mBtClick.setOnClickListener(this);
mBtInsert = (Button) findViewById(R.id.bt_insert);
mBtInsert.setOnClickListener(this);
mBtInsertMult = (Button) findViewById(R.id.bt_insert_mult);
mBtInsertMult.setOnClickListener(this);
mBtUpdata = (Button) findViewById(R.id.bt_updata);
mBtUpdata.setOnClickListener(this);
mBtDelete = (Button) findViewById(R.id.bt_delete);
mBtDelete.setOnClickListener(this);
mBtDeleteAll = (Button) findViewById(R.id.bt_delete_all);
mBtDeleteAll.setOnClickListener(this);
mBtQuery = (Button) findViewById(R.id.bt_query);
mBtQuery.setOnClickListener(this);
mBtQueryAll = (Button) findViewById(R.id.bt_query_all);
mBtQueryAll.setOnClickListener(this);
mBtQueryBuilder = (Button) findViewById(R.id.bt_query_builder);
mBtQueryBuilder.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
//插入数据库
case R.id.bt_insert:
insertData();
break;
case R.id.bt_insert_mult:
insertMultData();
break;
case R.id.bt_updata:
updata();
break;
case R.id.bt_delete:
delete();
break;
case R.id.bt_delete_all:
deleteAll();
break;
case R.id.bt_query:
query();
break;
case R.id.bt_query_all:
queryAll();
break;
case R.id.bt_query_builder:
queryBuilder();
break;
}
}
private void queryBuilder() {
// commonUtils.query1();
commonUtils.query3();
// commonUtils.query2();
}
private void queryAll() {
List<Student> students = commonUtils.queryAll();
Log.e(TAG, "queryAll: " + students.toString());
}
private void query() {
Student student = commonUtils.queryOne(1L);
Log.e(TAG, "query: " + student.toString());
}
private void deleteAll() {
commonUtils.deleteAll();
}
private void delete() {
Student student = new Student();
student.setId(1231153L);
commonUtils.deleteStudent(student);
}
private void updata() {
//update student set name='jack' where id=1001;
Student student = new Student();
student.setId(1231153L);
student.setAge(100);
student.setName("Jack");
student.setAddress("惠科");
commonUtils.updateStudent(student);
}
private void insertMultData() {
Log.e(TAG, "insertMultData: ");
List<Student> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Student student = new Student();
student.setAddress("山东");
student.setAge(18);
student.setName("小六" + i);
list.add(student);
}
commonUtils.insertMultStudent(list);
}
private void insertData() {
Log.e(TAG, "insertData: ");
Student student1 = getStudent("北京",15,"张三");
Student student2 = getStudent("山东",20,"李四");
Student student3 = getStudent("江西",20,"王五");
Student student4 = getStudent("深圳",25,"小六");
// student.setId(1231153L);
commonUtils.insertStudent(student1);
commonUtils.insertStudent(student2);
commonUtils.insertStudent(student3);
commonUtils.insertStudent(student4);
}
@NonNull
private Student getStudent(String adress,int age,String name) {
Student student = new Student();
student.setAddress(adress);
student.setAge(age);
student.setName(name);
return student;
}
}
<?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">
<Button
android:id="@+id/bt_insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加数据" />
<Button
android:id="@+id/bt_insert_mult"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加多条数据" />
<Button
android:id="@+id/bt_updata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改一条数据" />
<Button
android:id="@+id/bt_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除一条数据" />
<Button
android:id="@+id/bt_delete_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除所有数据" />
<Button
android:id="@+id/bt_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询单条记录" />
<Button
android:id="@+id/bt_query_all"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询所有记录" />
<Button
android:id="@+id/bt_query_builder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="使用queryBuilder" />
</LinearLayout>
此处遇到了一个坑 greenDao Property '' is not part of