GreenDao常用操作(二)

  1. 实现通用的操作类
    上篇中讲了基本的操作,这里来实现通用的数据库操作类
    1.使用方法

    Person person = new Person();
    person.setName("zhangsan");
    person.setAddress("shanghai");
    PersonDao dbDao =       
        BaseApplication.getDaoSession(this).getPersonDao();
    DBOperator<PersonDao, Person> dbOperator 
        = new DBOperator<PersonDao, Person>(dbDao, BaseApplication.getDaoSession(this));
     dbOperator.insertData(person);
    

    2.工具类代码如下

    
    public class DBOperator<T extends AbstractDao, E> {
    
        public T mCustomDao;
        public DaoSession mDaoSession;
    
        public DBOperator(T customDao, DaoSession daoSession) {
            this.mCustomDao = customDao;
            this.mDaoSession = daoSession;
        }
    
        /**
         * 插入一条数据
         */
        public long insertData(E e) {
            return mCustomDao.insert(e);
        }
    
        /**
         * 插入多条数据
         */
        public void insertDatas(final ArrayList<E> e) {
            mDaoSession.runInTx(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < e.size(); i++) {
                        E item = e.get(i);
                        mCustomDao.insert(item);
                    }
                }
            });
    
        }
    
        /**
         * 修改一条数据,根据id来匹配的
         */
        public void updateData(E e) {
            mCustomDao.update(e);
        }
    
        /***
         * 插入或替换数据
         * @param e
         */
        public void insertOrUpdate(E e){
            try{
                mCustomDao.insertOrReplace(e);
            }catch (Exception ex){
                ex.getStackTrace();
            }
        }
    
        /**
         * 修改一条数据,根据id来匹配的
         */
        public void updateDataByField(E e, Property fieldName, String fieldValue, String sql) {
            E result = getItemByField(fieldName, fieldValue);
            if(result!=null){
                mCustomDao.getDatabase().execSQL(sql);
            }else{
                mCustomDao.insert(e);
            }
        }
    
        public static String getUpdateSql(String tableName, String[] allColumns, String[] columnsValue, String[] condition, String[] conditionValue){
            String quotedTablename = '"' + tableName + '"';
            StringBuilder builder = new StringBuilder("UPDATE ");
            builder.append(quotedTablename).append(" SET ");
            int length = allColumns.length;
            for (int i = 0; i < length; i++) {
                String columnName = allColumns[i];
                String columnValue = columnsValue[i];
                builder.append(columnName).append(" = ").append("\'"+columnValue+"\'");
            }
            builder.append(" WHERE ");
            int confitionLength = condition.length;
            for (int j = 0; j < confitionLength; j++) {
                String key = condition[j];
                String Value = conditionValue[j];
                if(j!=0){
                    builder.append(" and ");
                }
                builder.append(key).append(" = ").append("\'"+Value + "\'");
            }
            return builder.toString();
        }
    
        /**
         * 查询所有数据
         */
        public ArrayList<E> getAllData() {
            return (ArrayList<E>) mCustomDao.loadAll();
        }
    
        /**
         * 根据Tid获取单条数据
         */
        public E getItemByTid(String tid) {
            ArrayList<E> list = (ArrayList<E>) mCustomDao.queryRaw(" tid = ? ", tid);
            if(list!=null){
                if(list.size()>0){
                    return list.get(0);
                }
            }
            return null;
        }
    
        /**
         * 根据某个字段获取单条数据
         */
        public E getItemByField(Property fieldName, String fieldValue) {
            QueryBuilder qb = mCustomDao.queryBuilder();
            qb.where(fieldName.eq(fieldValue));
            List list = qb.list();
            if(list!=null){
                if(list.size()>0){
                    return (E) list.get(0);
                }
            }
            return null;
        }
    
        /**
         * 根据ID获取一条数据
         * @param id
         * @return
         */
        public E getItemByID(long id){
            return (E) mCustomDao.load(id);
        }
    
        /**
         * 删除表中所有数据
         */
        public void deleteAllData(){
            mCustomDao.deleteAll();
        }
    
    
        /**
         * 根据id删除一条数据
         */
        public void deleteItemByID(long id){
            mCustomDao.deleteByKey(id);
        }
    
        public void deleteItemByTid(String tid){
            QueryBuilder<E> mqBuilder = mCustomDao.queryBuilder();
            mqBuilder.where(IllnessDBDao.Properties.Tid.eq(tid));
            List<E> chatEntityList = mqBuilder.build().list();
            mCustomDao.deleteInTx(chatEntityList);
        }
    
    }
    
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GreenDao是一个用于Android平台的对象关系映射(ORM)库,它可以帮助开发者简化与数据库的交互操作。在GreenDao中,可以使用ArrayList来存储和操作数据。 首先,要使用ArrayList,你需要在GreenDao的实体类中定义一个属性,并将其注解为@ToMany,表示这个属性是一个一对多关系。例如: ```java @Entity public class Category { @Id private Long id; private String name; @ToMany(referencedJoinProperty = "categoryId") private List<Item> items; // 省略其他代码 } ``` 在上面的例子中,Category实体类有一个items属性,它是一个ArrayList类型,用于存储与该分类相关的Item对象。 使用ArrayList时,你可以通过调用GreenDao生成的DAO类的相应方法来进行增删改查操作。例如,要向ArrayList中添加一个新的Item对象,可以使用以下代码: ```java Category category = new Category(); // 设置其他属性 // ... // 获取items列表 List<Item> items = category.getItems(); // 创建一个新的Item对象 Item newItem = new Item(); // 设置其他属性 // ... // 向items列表中添加新的Item对象 items.add(newItem); ``` 上述代码中,我们首先通过调用`getItems()`方法获取到Category对象的items列表,然后使用`add()`方法向列表中添加新的Item对象。 注意:为了使GreenDao能够正确地保存和更新ArrayList类型的属性,你还需要在生成的DAO类中指定相应的关系注解。具体的使用方法和其他操作可以参考GreenDao的官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值