搭建自己的SQLiteDataBase框架(二)

来源:互联网 发布:陕西天诚软件 怎么样 编辑:程序博客网 时间:2024/05/22 18:28

搭建自己的SQLiteDataBase框架(二)

标签(空格分隔): 未分类


  • 基本数据类型的增删改查(CRUD)
    1. 删除:
        private void delete(String tableName, String where, String[] args) {        db.delete(tableName, where, args);    }     public void delete(String id) {        try {            delete(mTableName, mIdName + "=?", new String[]{id});            //delete related association data            for (Field field : mForeignds) {                delete(DBUtils.getAssociationTableName(clz, field.getName()), "pk1=?", new String[]{id});            }        } catch (Exception e) {            System.out.println(e.toString());        }    }        public <T> void delete(T t) {        try {            String id = (String) id_field_.get(t);            delete(id);        } catch (Exception e) {            e.printStackTrace();            System.out.println(e.toString());        }    }
2. 增改
public <T> void newOrUpdate(T t) {        ContentValues contentValues = new ContentValues();        try {            String idValue = (String) id_field_.get(t);            for (Field field : fields) {                if (field.isAnnotationPresent(Column.class)) {                    field.setAccessible(true);                    Class<?> clz = field.getType();                    if (clz == String.class) {                        System.out.println("key:" + DBUtils.getColumnName(field) + ",value:" + field.get(t).toString());                        contentValues.put(DBUtils.getColumnName(field), field.get(t).toString());                    } else if (clz == int.class || clz == Integer.class) {                        contentValues.put(DBUtils.getColumnName(field), field.getInt(t));                    } else {                    //TODO                    }                }            }        } catch (Exception e) {            e.printStackTrace();            System.out.println("newOrUpdate:" + e.toString());        }        newOrUpdate(mTableName, contentValues);    }    private void newOrUpdate(String tableName, ContentValues contentValues) {        System.out.println(tableName + ",size:" + contentValues.size());        db.replace(tableName, null, contentValues);    }
3. 查询
 public T queryById(String id) {        Cursor cursor = rawQuery(mTableName, mIdName + "=?", new String[]{id});        T t = null;        if (cursor.moveToNext()) {            try {                t = clz.newInstance();                for (Field field : fields) {                    if (field.isAnnotationPresent(Column.class)) {                        field.setAccessible(true);                        Class<?> clazz = field.getType();                        if (clazz == int.class || clazz == Integer.class) {                            field.setInt(t, cursor.getInt(cursor.getColumnIndex(DBUtils.getColumnName(field))));                        } else if (clazz == String.class) {                            field.set(t, cursor.getString(cursor.getColumnIndex(DBUtils.getColumnName(field))));                        } else {                        //TODO                        }                    }                }            } catch (Exception e) {                e.printStackTrace();                System.out.println("queryById:" + e.toString());            }        }        return t;    }

以上就是基本的增删改查实现,看一下测试结果

     public void add() {            Developer developer = new Developer();            developer.setId("00001");            developer.setName("Stay");            developer.setAge(17);            DBManager.getInstance().getDao(Developer.class).newOrUpdate(developer);        }        public void queryCompanyById() {            Developer developer = DBManager.getInstance().getDao(Developer.class).queryById("00001");            if (developer != null) {                System.out.println(developer.toString());            }        }11-16 16:46:05.843 17260-17260/? I/System.out: id:00001,name:Stay,age:17

以上就是普通的增删该查了

0 0
原创粉丝点击