Android的sqlite数据库框架GreenDao的简单使用

怎么说呢?弄了一个早上,在网上说的问题,大概都碰到了,这里做个笔记,不想下次入坑.

1.项目build.gradle配置

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        ...
        classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0' //
    }
}

...

2.app modulebuild.gradle配置

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // greendao

android {
    compileSdkVersion 26
    buildToolsVersion "27.0.3"
    defaultConfig {
        ...
    }
    buildTypes {
        release {
            ...
        }
    }
    greendao { //greendao
        schemaVersion 1
        daoPackage 'com.example.liuyan.testgreendao.db'
        targetGenDir 'src/main/java'
    }
}

dependencies {
    ..

    compile 'org.greenrobot:greendao:3.0.1' //greendao
    compile 'org.greenrobot:greendao-generator:3.0.0'//greendao
    //加密库(依赖)
    //compile 'net.zetetic:android-database-sqlcipher:3.5.6'
}

3.项目结构如图

Android的sqlite数据库框架GreenDao的简单使用_第1张图片

4.上面那张图是在接下来的步骤完成后才有的

新建一个类(表的映射对象)User

需要注意的是:点击make project会自动生成set , get方法,及一些dao类.

如果做了对User做了改动,需要把set , get方法全部删除了,再点make project , 

直接点无效,有bug. 

主键id 的类型为Long 不为long

注解一定要写上

@Entity
public class User {
    //@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长
    //nameInDb:在数据中使用的别名,默认使用的是实体的类名
    //@Property(nameInDb = "USERNAME")
    //private String name;
    @Id(autoincrement = true)
    private Long id; //是大写,不是小写long因为如果user.setId(null)有错

    private String name;

    private int age; }

5.使用

public class MainActivity extends AppCompatActivity {
    Button add;
    Button chaxun;
    Button delete;
    Button update;
    UserDao userDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        add = (Button) findViewById(R.id.addd);
        chaxun = (Button) findViewById(R.id.chaxun);
        delete = (Button) findViewById(R.id.delete);
        update = (Button) findViewById(R.id.update);

        //初始化 第二个参数随便取名,为数据库的名字
        DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(this, "people-db", null);
        DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
        DaoSession daoSession = daoMaster.newSession();
        userDao = daoSession.getUserDao(); //得到Dao对象,用于CRUD操作


        /*user2 = new User();
        user2.setAge(99);
        user2.setName("liuyan2");
        user2.setId(1);
        userDao.insert(user2);*/

        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User user = new User();
                user.setId(null); //传null可以自增,不用设值
                user.setAge(22);
                user.setName("liuyan1");
                userDao.insert(user); //.insert()方法如果插入id一样的数据,会报错
                //insertOrReplace()方法则不会,会替换
            }
        });

        chaxun.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List allusers = userDao.loadAll();
                for (User s : allusers){
                    Log.i("mydate" , s.getName() + " " + s.getAge() + " id:" + s.getId());
                }
            }
        });

        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                User u = userDao.queryBuilder().where(UserDao.Properties.Id.eq(2))
                        .build().unique();
                userDao.delete(u); //如果如果id不存在,则会报错
                //或者userDao.deleteByKey(u.getId());
            }
        });

        update.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*user = new User(id , name);
                userDao.update(user2);*/ //如过没有对应的id,会报错
            }
        });

    }
}

其实重要的是查询操作,然后就是更新和删除,插入语句,一定要注意id要存在,不存在,就会报错.

 

6.一些常用查询语句如下:

//List allusers = userDao.loadAll();
                /*List users = userDao.queryBuilder()
                        .where(UserDao.Properties.Age.eq(22))
                        .where(UserDao.Properties.Name.eq("liuyan%"))
                        .where(UserDao.Properties.Id.eq(3))
                        .orderAsc() //升序排列 .orderDesc降序排列
                        .limit(5) //限制数据条数
                        .list(); //where是且的意思*/
                //如果查找单一对象,不用list用.unique()
                //%wei 通配符
                //where 是或的意思
                //!= : notEq
                //1. > : gt
                //2. < : lt
                //3. >= : ge
                //4. <= : le
                /*线程中查询
                final Query query = UserDao.queryBuilder().build();
                new Thread(){
                    @Override
                    public void run() {
                        List list = query.forCurrentThread().list();
                        Log.d("queryThread", "run() called" + list);
                    }
                }.start();*/
                //比如查找 age = 22 加上(id >6 或 id < 4)
                //select * from User where (id > 6 or id < 4) and name age 22
                List users = userDao.queryBuilder()
                        .where(UserDao.Properties.Age.eq(22))
                        .whereOr(UserDao.Properties.Id.gt(10) , UserDao.Properties.Id.lt(5))
                        .list();


                for (User s : users){
                    Log.i("mydate" , s.getName() + " " + s.getAge() + " id:" + s.getId());
                }

 

 

 

 

你可能感兴趣的:(数据库)