上一篇文章我们学习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
将自己的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,这样我们就完成了,你可以运行一下查看效果。