Android数据库框架greenDao3.2.0功能应用

   上一篇文章我们学习GreenDao集成

   这一篇我们来学习GreenDao的使用

1.0一般建议在Application中初始化数据库

public class BaseApplication extends Application {
    private static DaoSession daoSession;

    @Override
    public void onCreate() {
        super.onCreate();
        //配置数据库
        setupDatabase();
    }
    /**
     * 配置数据库
     */
    private void setupDatabase() {
        //创建数据库shop.db
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "shop.db", null);
        //获取可写数据库
        SQLiteDatabase db = helper.getWritableDatabase();
        //获取数据库对象
        DaoMaster daoMaster = new DaoMaster(db);
        //获取dao对象管理者
        daoSession = daoMaster.newSession();
    }
    public static DaoSession getDaoInstant() {
        return daoSession;
    }
}

这里我们需要创建一个Application,在代码中初始化数据库的基本数据,这里要讲解这下面这三个类

  • DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现

  • DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表

  • DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API

   这里注意一下我们要编译一下我们的工程(ctrl+F9),因为上面三个类是运行时创建的,还有相应的Shop中的set和get方法及构造函数

    将自己的BaseApplication添加到AndroidManifest.xml文件中去

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wuzhou.androidgreendao">

    <application
        android:name=".BaseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2.添加一个Dao,提供简单的Shop对象的增删该查的简单方法

package com.wuzhou.androidgreendao.dao;

import com.wuzhou.androidgreendao.BaseApplication;
import com.wuzhou.androidgreendao.entity.Shop;
import com.wuzhou.androidgreendao.geendao.ShopDao;

import java.util.List;

/**
 * 使用GreenDao 实现简单的增删改查,下面是基本方法
 * 增加单个数据
 * getShopDao().insert(shop);
 * getShopDao().insertOrReplace(shop);//如果有重复则覆盖
 * 增加多个数据
 * getShopDao().insertInTx(shopList);
 * getShopDao().insertOrReplaceInTx(shopList);//如果有重复则覆盖
 * 查询全部
 * List< Shop> list = getShopDao().loadAll();
 * List< Shop> list = getShopDao().queryBuilder().list();
 * 查询附加单个条件
 * .where()
 * .whereOr()
 * 查询附加多个条件
 * .where(, , ,)
 * .whereOr(, , ,)
 * 查询附加排序
 * .orderDesc()
 * .orderAsc()
 * 查询限制当页个数
 * .limit()
 * 查询总个数
 * .count()
 * 修改单个数据
 * getShopDao().update(shop);
 * 修改多个数据
 * getShopDao().updateInTx(shopList);
 * 删除单个数据
 * getTABUserDao().delete(user);
 * 删除多个数据
 * getUserDao().deleteInTx(userList);
 * 删除数据ByKey
 * getTABUserDao().deleteByKey();
 */
public class ShopBeanDao {
    /**
     * 添加数据,如果有重复则覆盖
     */
    public static void insertShop(Shop shop) {
        BaseApplication.getDaoInstant().getShopDao().insertOrReplace(shop);
    }
    /**
     * 删除数据
     */
    public static void deleteShop(long id) {
        BaseApplication.getDaoInstant().getShopDao().deleteByKey(id);
    }
    /**
     * 更新数据
     */
    public static void updateShop(Shop shop) {
        BaseApplication.getDaoInstant().getShopDao().update(shop);
    }
    /**
     * 查询Type为1的所有数据
     */
    public static List<Shop> queryShop() {
        return BaseApplication.getDaoInstant().getShopDao().queryBuilder().where(ShopDao.Properties.Type.eq(Shop.TYPE_CART)).list();

    }
    /**
     * 查询所有数据
     */
    public static List<Shop> queryAll() {
        return BaseApplication.getDaoInstant().getShopDao().loadAll();
    }
}
这样我们就基本上完成了,这里我们写一个界面来展示一下吧

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/content_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/ll_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >

        <Button
            android:id="@+id/btn_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:text="增加"/>

        <Button
            android:id="@+id/btn_delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:text="删除"/>

        <Button
            android:id="@+id/btn_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:text="修改"/>

        <Button
            android:id="@+id/btn_query"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:text="查询"/>

    </LinearLayout>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none"
        android:layout_below="@+id/ll_btn">

    </ListView>

</RelativeLayout>
MainActivity.java

package com.wuzhou.androidgreendao;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;

import com.wuzhou.androidgreendao.adapter.ShopListAdapter;
import com.wuzhou.androidgreendao.dao.ShopBeanDao;
import com.wuzhou.androidgreendao.entity.Shop;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_add ,btn_add2 ,btn_delete ,btn_edit ,btn_query;
    private ListView listView;
    private List<Shop> shops;
    private ShopListAdapter adapter;
    private int i = 1 ;
    private int j = 1 ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewId();
        initView();
    }
    public void initView(){
        shops = new ArrayList<>();
        shops = ShopBeanDao.queryAll();
        adapter = new ShopListAdapter(this, shops);
        listView.setAdapter(adapter);
    }
    /**
     * 添加数据 type 1
     * */
    private void addDate() {
        Shop shop = new Shop();
        shop.setType(Shop.TYPE_CART);
        shop.setAddress("广东深圳");
        shop.setImage_url("https://img.alicdn.com/bao/uploaded/i2/TB1N4V2PXXXXXa.XFXXXXXXXXXX_!!0-item_pic.jpg_640x640q50.jpg");
        shop.setPrice("19.40");
        shop.setSell_num(6666);
        shop.setName("正宗梅菜扣肉" + i++);
        ShopBeanDao.insertShop(shop);
        initView();
    }
    /**
     * 添加数据 type 2
     * */
    private void addDate2() {
        Shop shop = new Shop();
        shop.setType(Shop.TYPE_LOVE);
        shop.setAddress("陕西西安");
        shop.setImage_url("https://img.alicdn.com/bao/uploaded/i2/TB1N4V2PXXXXXa.XFXXXXXXXXXX_!!0-item_pic.jpg_640x640q50.jpg");
        shop.setPrice("89.40");
        shop.setSell_num(8888);
        shop.setName("正宗肉夹馍" + j++);
        ShopBeanDao.insertShop(shop);
        initView();
    }
    /**
     * 更新数据
     * */
    private void updateDate() {
        if (!shops.isEmpty()) {
            Shop shop = shops.get(0);
            shop.setName("我是修改的名字");
            ShopBeanDao.updateShop(shop);
            initView();
        }
    }
    /**
     * 删除数据
     * */
    private void deleteDate() {
        if (!shops.isEmpty()) {
            ShopBeanDao.deleteShop(shops.get(0).getId());
            initView();
        }
    }
    /**
     * 查询Type为1的所有数据
     * */
     public void requeryDateAll(){
         shops = ShopBeanDao.queryAll();
         initView();
     }
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_add:  //曾 type1
                addDate();
                break;
            case R.id.btn_add2:  //曾 type2
                addDate2();
                break;
            case R.id.btn_delete: //删
                deleteDate();
                break;
            case R.id.btn_edit:  //改
                updateDate();
                break;
            case R.id.btn_query: //查
                requeryDateAll();
                break;
        }
    }
    public void findViewId(){
        btn_add = (Button) findViewById(R.id.btn_add);
        btn_add2 = (Button) findViewById(R.id.btn_add2);
        btn_delete = (Button) findViewById(R.id.btn_delete);
        btn_edit = (Button) findViewById(R.id.btn_edit);
        btn_query = (Button) findViewById(R.id.btn_query);
        listView = (ListView) findViewById(R.id.listView);

        btn_add.setOnClickListener(this);
        btn_add2.setOnClickListener(this);
        btn_delete.setOnClickListener(this);
        btn_edit.setOnClickListener(this);
        btn_query.setOnClickListener(this);
    }
}
Adapter

package com.wuzhou.androidgreendao.adapter;

import android.content.Context;
import android.graphics.Paint;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.wuzhou.androidgreendao.R;
import com.wuzhou.androidgreendao.entity.Shop;

import java.util.List;

/**
 * Shop的Adapter
 */
public class ShopListAdapter extends BaseAdapter {
    private Context context;
    private List<Shop> datas;
    private LayoutInflater mInflater;

    public ShopListAdapter(Context context, List<Shop> datas) {
        this.context = context;
        this.datas = datas;
        mInflater = LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return datas == null ? 0 : datas.size();
    }

    @Override
    public Object getItem(int position) {
        return datas.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.adapter_shop_list, null);
        }
        ViewHolder holder = getViewHolder(convertView);
        Shop shop = datas.get(position);

        holder.iv_shop.setImageResource(R.mipmap.ic_launcher);
        holder.tv_name.setText(shop.getName());
        holder.tv_price.setText(shop.getPrice() + "");
        holder.tv_price_discount.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
        holder.tv_sell_num.setText("已售" + shop.getSell_num() + "件");

        return convertView;
    }
    /**
     * 获得控件管理对象
     */
    private ViewHolder getViewHolder(View view) {
        ViewHolder holder = (ViewHolder) view.getTag();
        if (holder == null) {
            holder = new ViewHolder(view);
            view.setTag(holder);
        }
        return holder;
    }

    /**
     * 控件管理类
     */
    private class ViewHolder {
        private TextView tv_name, tv_price, tv_price_discount, tv_sell_num;
        private ImageView iv_shop;

        ViewHolder(View view) {
            tv_name = (TextView) view.findViewById(R.id.tv_name);
            tv_price = (TextView) view.findViewById(R.id.tv_price);
            tv_price_discount = (TextView) view.findViewById(R.id.tv_price_discount);
            tv_sell_num = (TextView) view.findViewById(R.id.tv_sell_num);
            iv_shop = (ImageView) view.findViewById(R.id.iv_shop);
        }
    }
}
adapter - xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="horizontal">
        <ImageView
            android:id="@+id/iv_shop"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@mipmap/ic_launcher" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginLeft="10dp"
            android:orientation="vertical">
            <TextView
                android:id="@+id/tv_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="name"
                android:gravity="center_vertical"
                android:textSize="18sp"/>
            <TextView
                android:id="@+id/tv_price"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:text="price"
                android:textSize="18sp"/>
            <TextView
                android:id="@+id/tv_sell_num"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:text="shoujia"
                android:textSize="18sp"/>

        </LinearLayout>
    </LinearLayout>
    <TextView
        android:id="@+id/tv_price_discount"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>
ok,这样我们就完成了,你可以运行一下查看效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值