日期:2014-05-16 浏览次数:20420 次
在学习android时,做了一个简单的数据表与javaBean的映射,思路是:
定义一个Entity 的泛型抽象类,然后XXXDao 类继承于Entity,变成实体操作类,最后的bean实现序列化接口即可。
下面以一个“分类”为例说明一下:
首先是Entity.java的定义:
package org.nerve.cellnote.storage; import java.io.Serializable; import java.util.ArrayList; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * @项目名称 :CellNote * @文件名称 :Entity.java * @所在包 :org.nerve.cellnote.storage * @功能描述 : * 是一个范型抽象类,模拟 JPA 形式,封装数据库的常用操作,子类必须实现如下方法以达到数据绑定:<br /> * public abstract String getDBName(); //绑定的表名 <br /> * public abstract String getCreateSQL(); //表的构造sql语句,在建表时使用 <br /> * public abstract String[] getColumns(); //表列 <br /> * public abstract T bind(Cursor c); //实体的数据注入 <br /> * <br /> * @创建者 :集成显卡 1053214511@qq.com * @创建日期 :2013-1-21 * @修改记录 : */ public abstract class Entity<T extends Serializable> { protected Context context; public Entity(Context c){ context = c; } /** * @方法名称 :getDBName * @功能描述 :对应的表名 * @return * @return :String */ public abstract String getDBName(); /** * @方法名称 :getCreateSQL * @功能描述 :创建表的SQL * @return * @return :String */ public abstract String getCreateSQL(); /** * @方法名称 :getColumns * @功能描述 :得到字段 * @return * @return :String[] */ public abstract String[] getColumns(); /** * @方法名称 :bind * @功能描述 :传入一个Cursor,绑定到实体中 * @param c * @return :void */ public abstract T bind(Cursor c); public SQLiteDatabase getDB(){ return new DBManager(context).getDB(); } public T getById(int id){ Cursor c = query("_id="+id, null, null, null, null); if(c.moveToFirst()) return bind(c); else return null; } /** * @方法名称 :getBy * @功能描述 : * * @param column 查询的字段 * @param value 值 * @return */ public T getBy(String column, String value){ Cursor c = query(column+"=?", new String[]{value}, null, null, null); if(c.moveToFirst() == false) return null; return bind(c); } /** * @方法名称 :getAll * @功能描述 :返回所有记录 * * @return */ public ArrayList<T> getAll(){ Cursor c = query(null, null, null, null, getDefaultOrderBy()); ArrayList<T> result = new ArrayList<T>(); while(c.moveToNext()){ T temp = bind(c); result.add(temp); } c.close(); return result; } /** * @方法名称 :getList * @功能描述 :根据条件得到数据列表 * * @param column 匹配的字段 * @param value 字段值 * @param orderBY 排序方式 * @return */ public ArrayList<T> getList(String column, String values, String orderBY){ Cursor c = query(column+"=?", new String[]{values}, null, null, orderBY); ArrayList<T> result = new ArrayList<T>(); while(c.moveToNext()){ T temp = bind(c); result.add(temp); } c.close(); return result; } public ArrayList<T> getListLike(String where, String[] values, String orderBY){ Cursor c = query(where, values, null, null, orderBY); ArrayList<T> result = new ArrayList<T>(); while(c.moveToNext()){ T temp = bind(c); result.add(temp); } c.close(); return result; } /** * @方法名称 :query * @功能描述 :得到一个游标,数据表名和字段都是使用默认的 * @param where * @param argsW * @param groupBy * @param having * @param orderBy * @return * @return :Cursor */ public Cursor query(String where, String[] argsW, String groupBy, String having, String orderBy){ DBManager db = new DBManager(context); return db.getDB().query(getDBName(), getColumns(), where, argsW, groupBy, having, orderBy); } /** * @方法名称 :getDefaultOrderBy * @功能描述 :得到默认的排序方式。如果子类有特别要求,重写这个方法 * @return * @return :String */ public String getDefaultOrderBy(){ return null; } /** * @方法名称 :insert * @功能描述 : * @param cv * @return 返回新增数据行的id,如果出错返回-1 * @return :long */ public long insert(ContentValu