Android GreenDao3.2.0使用

简介:

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 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 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;
        }
    }
}

运行效果如图:

Android GreenDao3.2.0使用_第1张图片

 

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

 Android GreenDao3.2.0使用_第2张图片

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

 Android GreenDao3.2.0使用_第3张图片

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

 

完毕!



你可能感兴趣的:(Android,总结类)