【android开发记录片】3.数据库SQLite 的对象封装
来源:互联网 发布:cab软件触屏 编辑:程序博客网 时间:2024/05/17 17:55
在学习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);elsereturn 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(ContentValues cv){return getDB().insert(getDBName(), null, cv);}public int update(ContentValues cv, String where, String[] whereArgs){return getDB().update(getDBName(), cv, where, whereArgs);}/** * @方法名称 :delById * @功能描述 :根据id删除数据行,返回的是删除的行数 * *@param id *@return */public int delById(int id){return getDB().delete(getDBName(), "_id="+id, null);}/** * @方法名称 :delBy * @功能描述 :根据条件删除数据行,返回的是删除的行数 * *@param column *@param value *@return */public int delBy(String column, String value){return getDB().delete(getDBName(), column+"=?", new String[]{value});}}
再定义bean : Category.java
package org.nerve.cellnote.domain;import java.io.Serializable;/** * @项目名称 :CellNote * @文件名称 :Category.java * @所在包 :org.nerve.cellnote.domain * @功能描述 : *便签的分类 * @创建者 :集成显卡1053214511@qq.com * @创建日期 :2013-1-21 * @修改记录 : */@SuppressWarnings("serial")public class Category implements Serializable{public int id;public String name;public int parentId;public Category(){}public Category(String name){this.name = name;}}
最后是CategoryDao.java:
package org.nerve.cellnote.domain;import org.nerve.cellnote.storage.Entity;import android.content.Context;import android.database.Cursor;public class CategoryDao extends Entity<Category>{public CategoryDao(Context c) {super(c);}@Overridepublic String getDBName() {return "category";}@Overridepublic String getCreateSQL() {StringBuilder sb = new StringBuilder();sb.append("create table "+getDBName()+" (_id integer primary key autoincrement," +"name text,parentId integer);");return sb.toString();}@Overridepublic String[] getColumns() {return new String[]{"_id","name","parentId"};}/** * 在这里,使用了 getColumns() 的顺序获得数据项 */@Overridepublic Category bind(Cursor c) {Category cg = new Category();cg.id = c.getInt(0);cg.name = c.getString(1);cg.parentId = c.getInt(2);return cg;}}
DAO 类中重写指定的方法就可以了。
对于获取数据,可以这样:
CategoryDao categoryDao = new CategoryDao(context);return getCategoryDao().getById(id);
可以将这些操作封装在一个Service层中,方便管理。
- 【android开发记录片】3.数据库SQLite 的对象封装
- Android sqlite数据库的封装使用
- SQlite数据库的封装
- SQLite数据库的封装
- Android数据库sqlite封装心得
- 【ios开发】使用FMDB封装类的sqlite数据库操作
- SQLite数据库实用的封装
- Android 开发 SQLite数据库
- Android开发-SQLite数据库
- 【android开发记录片】2.基于Eclipse的JNI开发环境的搭建(cygwin+NDK)
- Android 开发中 SQLite 数据库的使用
- Android 开发之SQLITE 数据库的使用
- android开发中的数据库SQLite的使用
- Android开发之sqlite数据库的应用
- Android开发当中SQLite数据库的应用
- android sqlite数据库封装 实现crud
- android SQLite的简单封装
- Android开发11:SQLite数据库
- C# 5.0 两个新关键字 async await 在Silverlight中的应用
- boost look free
- 读<<零成本实现web自动化测试>>有感,第一章:自动化测试基础
- eclipse中tomcat自动部署时自动停止问题processWorkerExit(w, completedAbruptly)
- lock free 之 stack
- 【android开发记录片】3.数据库SQLite 的对象封装
- WM_TIMER消息映射(转)
- WindowsAPI笔记(二)---动手写第一个Windows程序
- demo05——返回字符串第一个数字
- 单个生产者和单个消费者模型(spsc)
- 2013-2-12 - loader代码调试心得记录。
- 回调函数透彻理解Java
- 2-SAT 学习笔记
- OOD面试题