android数据库——GreenDao

GreenDao是android数据库开发目前比较流行的ORM框架,一些概念就不说了,网上都有的,今天在这里主要写一下它的用法。

1、首先去网站https://github.com/greenrobot/greenDAO上下载示例工程,建立java工程,生成DaoMaster,Daosession,...Dao,...Entity。代码如下:

public class GreenDaoTest {
public static void main(String[] args) throws Exception {
//数据库版本号是1,liyang.com.myapptest.daos是最后Dao生成的包路径
//这里最好和项目里面的包一致,这样省得麻烦

Schema schema = new Schema(1, "liyang.com.myapptest.daos");
addCities(schema);
addPortAndCabinet(schema);
//generate all daos,F:/greenDaoProduct是生成的文件所在目录
new DaoGenerator().generateAll(schema, "F:/greenDaoProduct");
}

private static void addCities(Schema schema) {
Entity city = schema.addEntity("CityEntity");
city.addIdProperty();
city.addStringProperty("name");
city.addIntProperty("level");
city.addStringProperty("pingyin");
}

private static void addPortAndCabinet(Schema schema) {
Entity customer = schema.addEntity("Customer");
customer.addIdProperty();
customer.addStringProperty("name").notNull();
Entity order = schema.addEntity("Order");
order.setTableName("ORDERS"); // "ORDER" is a reserved keyword
order.addIdProperty();
Property orderDate = order.addDateProperty("date").getProperty();
Property customerId = order.addLongProperty("customerId").notNull().getProperty();
order.addToOne(customer, customerId);
ToMany customerToOrders = customer.addToMany(order, customerId);
customerToOrders.setName("orders");
customerToOrders.orderAsc(orderDate);

}
}

这里主要生成三张表,第一张是城市表,第二张是顾客表,第三张是订单表。顾客和订单是一对多的关系,通过在订单表里面加上外键

Property customerId = order.addLongProperty("customerId").notNull().getProperty();然后通过

order.addToOne(customer, customerId);
ToMany customerToOrders = customer.addToMany(order, customerId);

两句话确定一对多关系。这样如果有一条顾客记录,这位顾客有多个订单,那么就可以通过getOrders()获取她的所有订单了,非常方便,当然也可以通过getCustomer()获取一个订单的所属顾客。

运行该段代码后如果没什么问题就会如下图所示:


然后在F:/greenDaoProduct里面在liyang.com.myapptest.daos包下面会生成Dao类等文件如下图


2、建立android工程,然后把上图里面的几个java文件放到对于的包下面,记得包名要一样啊,不然还要改,如下图


然后再建立两个数据库操作公共类DBUtil和DBUtilBase,代码如下:

public class DBUtilBase {

        private DaoSession daoSession = null;
        private DaoMaster daoMaster = null;
        public static String DB_NAME = "/sdcard/myapp_test.db";//数据库建立在sdcard上面,名字叫myapp_test.db
        private static DBUtilBase singleDB = new DBUtilBase();
        //私有默认构造子
        private DBUtilBase(){
        }
// 静态工厂方法
        public static DBUtilBase getInstance(){
            return singleDB;
        }
        public DaoMaster getDaoMaster(Context context){
            if(daoMaster == null){
                DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
                SQLiteDatabase db = helper.getWritableDatabase();
                daoMaster = new DaoMaster(db);
            }
            return daoMaster;
        }
        public DaoSession getDaoSession(Context context){
            if(daoSession == null){
                daoSession = getDaoMaster(context).newSession();
            }
            return daoSession;
        }
}

然后建立DBUtil类,主要实现操作数据库的具体方法,主要是对三张表的增删改查

public class DBUtil {

    private static DBUtil singleDB=null;
    private DaoSession daoSession=null;
    private CityEntityDao cityEntityDao=null;
    private CustomerDao customerDao=null;
    private OrderDao orderDao=null;
    private DBUtil(Context context){
        daoSession=DBUtilBase.getInstance().getDaoSession(context);
        cityEntityDao=daoSession.getCityEntityDao();
        customerDao=daoSession.getCustomerDao();
        orderDao=daoSession.getOrderDao();
    }
    public static DBUtil getDbInstance(Context context){
        if (singleDB==null){
            singleDB=new DBUtil(context);
        }
        return singleDB;
    }
    public void insertCity(CityEntity cityEntity){
        if (cityEntity!=null){
            cityEntityDao.insert(cityEntity);
        }
    }
    public void deleteCity(CityEntity cityEntity){
        if (cityEntity!=null){
            cityEntityDao.delete(cityEntity);
        }
    }
    public void updateCity(CityEntity cityEntity){
        if (cityEntity!=null){
            cityEntityDao.update(cityEntity);
        }
    }
    public List<CityEntity> getAllCity(){
        return cityEntityDao.loadAll();
    }
    public CityEntity getCityByPrimaryKey(long id){
        return cityEntityDao.load(id);
    }
    public List<CityEntity> getCityByLevel(int level){
        if (level<0)
            return null;
        String where = "WHERE "+CityEntityDao.Properties.Level.columnName+" =?";
        List<CityEntity> cityEntities=cityEntityDao.queryRaw(where,level+"");
        if (cityEntities==null)
            return null;
        return cityEntities;
    }
    ///
    public void insertCustomer(Customer customer){
        if (customer!=null){
            customerDao.insert(customer);
        }
    }
    public void deleteCustomer(Customer customer){
        if (customer!=null){
            customerDao.delete(customer);
        }
    }
    public void updateCustomer(Customer customer){
        if (customer!=null){
            customerDao.update(customer);
        }
    }
    public List<Customer> getAllCustomers(){
        return customerDao.loadAll();
    }
    //
    public void insertOrder(Order order){
        if (order!=null){
            orderDao.insert(order);
        }
    }
    public void deleteOrder(Order order){
        if (order!=null){
            orderDao.delete(order);
        }
    }
    public void updateOrder(Order order){
        if (order!=null){
            orderDao.update(order);
        }
    }
    public List<Order> getAllOrderS(){
        return orderDao.loadAll();
    }
}

下面建立一个Activity,主要测试使用数据库,代码如下:

public class GreenDaoTestActivity extends ActionBarActivity {

    private DBUtil db;
    private Context ctx;
    private TextView showText=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_green_dao_test);
        ctx=this;
        db=DBUtil.getDbInstance(ctx);
        showText=(TextView)findViewById(R.id.show_data_text);
    }
    public void showData(View view){
        List<CityEntity> cities= db.getAllCity();
        String cityStr="";
        for(CityEntity cityEntity:cities){
            cityStr+=cityEntity.getId()+"  "+cityEntity.getName()+" "+cityEntity.getLevel()+" "+cityEntity.getPingyin()+"\n";
        }
        showText.setText(cityStr);
    }
    public void insertDataBtn(View view){
        CityEntity city=new CityEntity();
        city.setName("苏州");
        city.setLevel(1);
        city.setPingyin("suzhou");
        db.insertCity(city);
        showData(view);
    }
    public void deleteDataBtn(View view){
        List<CityEntity> cities= db.getAllCity();
        CityEntity city=cities.get(cities.size()-1);
        db.deleteCity(city);
        showData(view);
    }
    public void updateDataBtn(View view){
        List<CityEntity> cities= db.getAllCity();
        CityEntity city=cities.get(cities.size()-1);
        city.setName("上海");
        city.setPingyin("shangai");
        city.setLevel(0);
        db.updateCity(city);
        showData(view);
    }
    public void selectLevelCities(View view){
        List<CityEntity> cities=db.getCityByLevel(0);
        String cityStr="";
        for(CityEntity cityEntity:cities){
            cityStr+=cityEntity.getId()+"  "+cityEntity.getName()+" "+cityEntity.getLevel()+" "+cityEntity.getPingyin()+"\n";
        }
        showText.setText(cityStr);
    }
    public void selectIdCity(View view){
        CityEntity cityEntity=db.getCityByPrimaryKey(2);
        String cityStr=cityEntity.getId()+"  "+cityEntity.getName()+" "+cityEntity.getLevel()+" "+cityEntity.getPingyin();
        showText.setText(cityStr);
    }

    public void showCustomerData(View view){
        List<Customer> customers=db.getAllCustomers();
        String str="";
        for(Customer customer:customers){
            str+=customer.getId()+"  "+customer.getName()+"\n";
        }
        showText.setText(str);
    }
    public void insertCustomer(View view){
        Customer customer=new Customer();
        customer.setName("小李");
        db.insertCustomer(customer);
        showCustomerData(view);
    }
    public void deleteCustomer(View view){
        List<Customer> customers=db.getAllCustomers();
        Customer customer=customers.get(customers.size()-1);
        db.deleteCustomer(customer);
        showCustomerData(view);
    }
    public void updateCustomer(View view){
        List<Customer> customers=db.getAllCustomers();
        Customer customer=customers.get(customers.size()-1);
        customer.setName("小王");
        db.updateCustomer(customer);
        showCustomerData(view);
    }
    public void getOrdersBelongCustomer(View view){
        List<Customer> customers=db.getAllCustomers();
        Customer customer=customers.get(customers.size()-1);
        List<Order> orders=customer.getOrders();
        String str="";
        for(Order order:orders){
            str+=order.getId()+"  "+order.getCustomerId()+"  "+order.getDate().toString()+"\n";
        }
        showText.setText(str);
}   

//
    public void showOrderData(View view){
        List<Order> orders=db.getAllOrderS();
        String str="";
        for(Order order:orders){
            str+=order.getId()+"  "+order.getCustomerId()+"  "+order.getDate().toString()+"\n";
        }
        showText.setText(str);
    }
    public void insertOrder(View view){
        Order order=new Order();
        order.setCustomerId(2);
        order.setDate(new Date());
        db.insertOrder(order);
        showOrderData(view);
    }
    public void deleteOrder(View view){
        List<Order> orders=db.getAllOrderS();
        Order order=orders.get(orders.size()-1);
        db.deleteOrder(order);
        showOrderData(view);
    }
    public void updateOrder(View view){
        List<Order> orders=db.getAllOrderS();
        Order order=orders.get(orders.size()-1);
        order.setCustomerId(3);
        db.updateOrder(order);
        showOrderData(view);
    }
    public void selectCustomerByOrder(View view){
        List<Order> orders=db.getAllOrderS();
        Order order=orders.get(0);
        Customer customer=order.getCustomer();
        String str=customer.getId()+"  "+customer.getName();
        showText.setText(str);
    }
}

布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    tools:context="liyang.com.myapptest.GreenDaoTestActivity">
    <TextView
        android:id="@+id/show_data_text"
        android:text="数据显示区域"
        android:textColor="#000000"
        android:gravity="center"
        android:background="#ffffff"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <LinearLayout
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:layout_marginTop="20dp"
            android:onClick="showData"
            android:text="显示所有城市"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:text="插入城市"
            android:onClick="insertDataBtn"
            android:layout_width="100dp"
            android:layout_height="40dp" />
        <Button
            android:onClick="deleteDataBtn"
            android:text="删除城市"
            android:layout_width="100dp"
            android:layout_height="40dp" />
        <Button
            android:onClick="updateDataBtn"
            android:text="修改城市"
            android:layout_width="100dp"
            android:layout_height="40dp" />
        <Button
            android:onClick="selectLevelCities"
            android:text="查询level为0的城市"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="selectIdCity"
            android:text="查询id为2的城市"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="showCustomerData"
            android:text="显示所有消费者"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="insertCustomer"
            android:text="插入消费者"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="deleteCustomer"
            android:text="删除消费者"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="updateCustomer"
            android:text="更新消费者"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="getOrdersBelongCustomer"
            android:text="获取最后一个消费者所有的订单"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="showOrderData"
            android:text="显示所有订单"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="insertOrder"
            android:text="插入订单"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="deleteOrder"
            android:text="删除订单"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="updateOrder"
            android:text="更新订单"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
        <Button
            android:onClick="selectCustomerByOrder"
            android:text="获取第一个订单所属的消费者"
            android:layout_width="wrap_content"
            android:layout_height="40dp" />
    </LinearLayout>
    </ScrollView>
</LinearLayout>

在Manifest.xml里面记得加入权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

在gradle里面加入compile 'de.greenrobot:greendao:2.0.0'导入greenDao包

测试的一些效果图如下:













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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值