您的位置:首页 > 移动开发 > Android开发

Android GreenDao3.2.0使用

2017-04-17 10:19 246 查看
简介:

Greendao是一个开源的Android ORM(对象-关系映射)开发框架,它使SQLite数据库的操作变得更简单、更容易理解。它减轻开发人员处理低级别的数据库需求,同时节省开发时间。 SQLite是一个很好的嵌入式关系数据库。尽管如此,写SQL和解析查询结果是相当繁琐和耗时的任务。Greendao使你远离这些java对象映射到数据库表(称为ORM,对象-关系映射”)。这样你可以存储,更新,删除,并使用一个简单的面向对象的API来操作数据库。

使用方法:

第一步:在整个项目工程的build.gradle文件中添加依赖,如下中红色标记的部分。

buildscript {

    repositories {

        jcenter()

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath
'com.jakewharton:butterknife-gradle-plugin:8.5.1'
        classpath'org.greenrobot:greendao-gradle-plugin:3.2.0'
    }

}

allprojects {

    repositories {

        jcenter()

    }

}

task clean(type: Delete) {

    delete rootProject.buildDir

}

第二步:在GreenDao下的build.gradle中添加配置,如下红色标记的部分:

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

android {

    compileSdkVersion 24
    buildToolsVersion
"25.0.0"

    defaultConfig {

        applicationId "com.example.greendao"
        minSdkVersion
15
        targetSdkVersion
24
        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 1
        targetGenDir
'src/main/java'
    }

}

dependencies {

    compile fileTree(dir:
'libs', include: ['*.jar'])

    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {

        exclude group:
'com.android.support', module:
'support-annotations'
    })

    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile
'junit:junit:4.12'
    compile'org.greenrobot:greendao:3.2.0'
}

 

第三步:在项目包下创建实体类User:

package com.example.greendao;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
/**
 * @Entity表示这个实体类会在数据库中生成对应的表,
 */
@Entity
public class User {

    //@Id表示该字段是id,该字段的数据类型为 Long
    @Id
    privateLongid;

    //@Property则表示该属性将作为表的一个字段,其中nameInDb看名字就知道这个属性在数据库中对应的数据名称。
    @Property(nameInDb ="USERNAME")

    private String
username;

    @Property(nameInDb =
"PWD")

    private String
pwd;

}

 

第四步:编译运行项目,编译运行成功之后系统会帮助我们在User类里生成相应的构造方法和get/set方法,并且还会在我们的包下生成DaoMaster和DaoSession。如下:

 

那么这些类如何使用呢?下面我们就用这些类对SQlite数据库进行增删改查的操作。

首先,我们在布局文件activity_main.xml中添加一些增删改成的按钮:

<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"
    android:layout_width="match_parent"android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.greendao.MainActivity">

    <Button
        android:id="@+id/create_sq"
        android:text="创建数据库"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/add_sq"
        android:text="增加数据"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/del_sq"
        android:text="删除一条数据"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/delall_sq"
        android:text="删除全部数据"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/modify_sq"
        android:text="修改数据"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/query_one_sq"
        android:text="查询某条数据"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/query_all_sq"
        android:text="查询全部数据"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

 

然后,我们在MainActivity中实现这些按钮的点击事件,具体实现请参考如下代码,相应操作都有代码注释:

package com.example.greendao;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

public class MainActivity
extends AppCompatActivity implements
View.OnClickListener {

    /**
     * 数据库的名字
     */
    private finalStringDBName=
"greendao_test.db";

    //Button的成员变量
    privateButtoncreatBtn;

    private Button
addBtn;

    private Button
delBtn;

    private Button
delAllBtn;

    private Button
modifyBtn;

    private Button
queryBtn;

    private Button
queryAllBtn;

    //操作user表的成员变量
    UserDao
userDao = null;

    @Override
    protected voidonCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        creatBtn = (Button) findViewById(R.id.create_sq);

        addBtn = (Button) findViewById(R.id.add_sq);

        delBtn = (Button) findViewById(R.id.del_sq);

        delAllBtn = (Button) findViewById(R.id.delall_sq);

        modifyBtn = (Button) findViewById(R.id.modify_sq);

        queryBtn = (Button) findViewById(R.id.query_one_sq);

        queryAllBtn = (Button) findViewById(R.id.query_all_sq);

        creatBtn.setOnClickListener(this);

        addBtn.setOnClickListener(this);

        delBtn.setOnClickListener(this);

        delAllBtn.setOnClickListener(this);

        modifyBtn.setOnClickListener(this);

        queryBtn.setOnClickListener(this);

        queryAllBtn.setOnClickListener(this);

    }

    @Override
    public voidonClick(View v) {

        switch (v.getId()) {

            //点击创建数据库的操作,如果已经创建过则默认不再创建 只是打开数据库 并获取操作user表的session
            caseR.id.create_sq:

                //获取DaoMaster对象
                DaoMaster.DevOpenHelper devOpenHelper =newDaoMaster.DevOpenHelper(getApplicationContext(),DBName,null);

                DaoMaster daoMaster = new
DaoMaster(devOpenHelper.getWritableDb());

                //获取DaoSession对象
                DaoSession daoSession = daoMaster.newSession();

                //获取UserDao对象
                userDao= daoSession.getUserDao();

                Log.i("tag",
"create db");

                break;

            //点击增加数据的操作
            caseR.id.add_sq:

                //添加一条数据 GreenDao一般默认将id字段作为唯一约束并自动增长 在添加数据时不要添加id相同的数据  否则会报错
                User user =newUser();

                user.setPwd("123");

                user.setUsername("zhangsan");

                if (userDao!=null) {

                    try {

                        userDao.insert(user);

                        Log.i("tag","insert data in db");

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                }

                break;

            //点击删除某条数据的操作
            caseR.id.del_sq:

                //删除id为1的数据
                if(userDao!=null) {

                    userDao.deleteByKey(1l);

                    Log.i("tag","delete data in db");

                }

                break;

            //点击删除全部数据的操作
            caseR.id.delall_sq:

                //删除全部数据
                if(userDao!=null) {

                    userDao.deleteAll();

                    Log.i("tag","delete all data in db");

                }

                break;

            //点击修改数据的操作
            caseR.id.modify_sq:

                //修改数据 将密码改为321
                User user1 =newUser(1L,"zhangsan","321");

                if (userDao!=null) {

                    userDao.update(user1);

                    Log.i("tag","update data in db");

                }

                break;

            //点击查询某条数据的操作
            caseR.id.query_one_sq:

                //查询id为 1 的数据
                if(userDao!=null) {

                    QueryBuilder<User> queryBuilder =
userDao.queryBuilder();

                    queryBuilder.where(UserDao.Properties.Id.eq(1L));

                    User u = queryBuilder.unique();

                    if (u !=
null){

                        Log.i("tag","id = "+ u.getId() +"\n"+"username
= "+ u + "\n"+"pwd = "+ u +
"\n");

                    } else {

                        Log.i("tag","no this data ");

                    }

                }

                break;

            //点击查询全部数据的操作
            caseR.id.query_all_sq:

                //查询全部数据
                if(userDao!=null) {

                    List<User> users = userDao.loadAll();

                    if (users !=
null && users.size() > 0) {

                        for (inti =0; i < users.size(); i++) {

                            Log.i("tag","id = "+ users.get(i).getId() +"\n"+"username
= "+ users.get(i).getUsername() +"\n"+"pwd = "+ users.get(i).getPwd() +"\n");

                        }

                    } else {

                        Log.i("tag","no data in db");

                    }

                }

                break;

        }

    }

}

运行效果如图:



 

我们可以点击上面按钮,然后通过日志来查看操作结果,例如我们依次点击创建数据库、增加数据、查询全部数据,查看日志如下:

 


我们在依次点击增加数据、修改数据、查询全部数据,结果如下:

 


我们看到成功又添加了一条id = 2的数据并将第一条数据的密码改为了321,读者可通过这种方式继续尝试其他功能。

 

完毕!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: