Android数据库的操作

GreenDao简单使用

1.首先在project的glide中添加下面的配置

dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0'
    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
}

2.在app的glide中添加下面的配置

apply plugin: 'org.greenrobot.greendao'
compile 'org.greenrobot:greendao:3.2.2'
greendao {//在依赖导入汇总添加一个自动添加数据库表名的配置依赖
    schemaVersion 1 //数据库版本号
    daoPackage 'com.zhenggzh.dream.retrofitandrxjavademo.database' //指定设置DaoMaster、DaoSession、Dao目录 可根据项目本身设置 (可以根据自己的项目进行修改)
    targetGenDir 'src/main/java'
}

3.创建一个shop类

package com.zhenggzh.dream.retrofitandrxjavademo.database;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Generated;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Unique;

/**
 * @Entity:告诉GreenDao该对象为试题,只有被@Entity注释的bean类才能被dao类操作
 * @Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)  标识主键会自增
 * @Property:可以自定义字段名,注意外键不能使用该属性
 * @NotNull:属性不能为空
 * @Transient:使用该注释的属性不会被存入数据库的字段中
 * @Unique:该属性值在数据库中是唯一值
 * @Generated:编译后自动生成的构造函数,方法等的注释 提示构造函数,方法发等不能为修改
 */
@Entity
public class Shop {
    //标识购物车列表
    public static final int TYPE_CART =0x01;

    //id不能使用int类型 指定使用Long类型  标识主键 自增
    @Id(autoincrement = true)
    private Long id;

    //商品名称(unique表示该属性必须在数据库中是唯一的值)
    @Unique
    private String name;

    //商品价格
    @Property(nameInDb = "price")
    private String price;

    //已售数量
    private int sell_num;

    //图标url
    private String image_url;

    //商家地址
    private String address;

    //商品列表分类
    private int type;


    @Generated(hash = 1304458862)
    public Shop(Long id, String name, String price, int sell_num, String image_url, String address, int type) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.sell_num = sell_num;
        this.image_url = image_url;
        this.address = address;
        this.type = type;
    }

    @Generated(hash = 633476670)
    public Shop() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public int getSell_num() {
        return sell_num;
    }

    public void setSell_num(int sell_num) {
        this.sell_num = sell_num;
    }

    public String getImage_url() {
        return image_url;
    }

    public void setImage_url(String image_url) {
        this.image_url = image_url;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }
}

3.在项目中 make project(快捷键:ctrl + f9) 会在指定的包下生成DaoMaster DaoSession ShopDao(根据新建的bean类)生成3个文件

4.在Application中配置数据库

public class BigEyeApplication extends Application {

    public static Context appContext;
    public static BigEyeApplication app;
    public static DaoSession daoSession;
    @Override
    public void onCreate() {
        super.onCreate();
        appContext = getApplicationContext();
        app = this;
        //配置数据库
        setupDatabase();
    }

    /**
     * 配置数据库
     *
     * DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
     * DaoMaster:GreenDao的顶级对象,作为数据库对象。用于创建表和删除表
     * Daosession:管理所有的Dao对象,Dao对象中存在着增删改查
     */
    private void setupDatabase(){
        //创建数据库shop.db
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(appContext,"shop.db");
        //获取可写数据库
        SQLiteDatabase db = helper.getWritableDatabase();
        //获取数据库对象
        DaoMaster daoMaster = new DaoMaster(db);
        //获取到对象管理者
        daoSession = daoMaster.newSession();
    }

    public static DaoSession getDaoInstanct(){
        return daoSession;
    }
}

5.新建一个Dao做具体的增删改查的操作

public class LoveDao {

    /**
     * 添加数据 如果有重复就直接覆盖
     */
    public static void insertShop(Shop shop){
        BigEyeApplication.getDaoInstanct().getShopDao().insertOrReplace(shop);
    }

    /**
     * 删除数据
     * @param id
     */
    public static void deleteShop(Long id){
        BigEyeApplication.getDaoInstanct().getShopDao().deleteByKey(id);
    }

    /**
     * 更改数据
     * @param shop
     */
    public static void updateShop(Shop shop){
        BigEyeApplication.getDaoInstanct().getShopDao().update(shop);
    }

    /**
     * 查询类型为1的数据
     * @return
     */
    public static QueryBuilder queryShop(){
        return BigEyeApplication.getDaoInstanct().getShopDao().queryBuilder().where(ShopDao.Properties.Type.eq(Shop.TYPE_CART));
    }

    /**
     * 查询所有
     * @return
     */
    public static List queryAll(){
        return BigEyeApplication.getDaoInstanct().getShopDao().loadAll();
    }

}

6.根据自己的需求进行增删改查的操作

具体的调用示例如下:

增:

Shop shop = new Shop();
shop.setType(shop.TYPE_CART);
shop.setAddress("广东深圳");
shop.setPrice("19.40");
shop.setSell_num(1234);
shop.setName("梅菜扣肉"+ i++);
LoveDao.insertShop(shop);

删://在使用前判断本地数据库中的数据是否为空  根据id进行删除

LoveDao.deleteShop(shops.get(0).getId());

改://在使用前判断本地数据库中的数据是否为空

Shop shop = shops.get(0);
shop.setName("修改名字");
LoveDao.updateShop(shop);

查://查询所有

List shops = LoveDao.queryAll();

 

 

 

 

 

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