Android应用开发中DAO模式应用

上传人:hs****ma 文档编号:490005398 上传时间:2024-02-14 格式:DOCX 页数:12 大小:119.44KB
返回 下载 相关 举报
Android应用开发中DAO模式应用_第1页
第1页 / 共12页
Android应用开发中DAO模式应用_第2页
第2页 / 共12页
Android应用开发中DAO模式应用_第3页
第3页 / 共12页
Android应用开发中DAO模式应用_第4页
第4页 / 共12页
Android应用开发中DAO模式应用_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《Android应用开发中DAO模式应用》由会员分享,可在线阅读,更多相关《Android应用开发中DAO模式应用(12页珍藏版)》请在金锄头文库上搜索。

1、Android 应用开发中 DAO 模式应用在 Android 的应用开发中,往往会涉及到许多数据的存储和交互,其中,内嵌的 SQLite 数据库会作为首选的方案,在一些涉及比较多的数据交互情境中,通常表现为表的数量比较 多,我们就有必要开发一个比较通用的数据访问框架了。DA0模式就是可以把上层业务和底 层数据访问分开的一种广泛运用的设计模式。DAO (数据访问对象Data Access Object)是一种应用程序编程接口(API), 最初存在于微软的Visual Basic中,它允许程序员请求对微软的Access数据库的访问。DAO 是微软的第一个面向对象的数据库接口。DAO对象封闭了 A

2、ccess的Jet函数。通过Jet函 数,它还可以访问其他的结构化查询语言(SQL)数据库。开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的业务逻辑 分开实现DAO模式能够更加专注于编写数据访问代码.DAO模式后来成为标准的J2EE设计模式之一。同样现在也可以应用到Android中.开发 人员使用这个模式把底层的数据访问操作和上层的商务逻辑分开.如下图示意,为 DAO 模式在 Android 中的使用时序图 :11:调用数据访问方法12 :通过帮助类返回数据库对象SQLiteDatabase :进行数据访问操传14:返回数第访问结果一个典型的 DAO 实现有下列几个组件:

3、1. 一个DAO接口或者抽象类,定义基础DAO接口规范,定义CRUD操作 接口定义时声明泛型,在运行时设置为数据值对象类型,增删改查操作都是对此对象进 行处理。数据访问方法中,需要传送的外部参数,我们还可以通过Map集合来保存:/* Created by mac on 23/4/16.* 一个DAO接口或者抽象类,定义基础DAO接口规范,定义CRUD操作 */public interface IBaseDaoT/添加public boolean insert(T t);/修改public boolean update(T t, MapString,Objectargs);/删除public b

4、oolean delete(T t, MapString,Objectargs);/查询public ListT selectAll();/带参数查询public ListT selectWithArgs(MapString,Object args);/查询单个public T selectSingle(MapString,Object args);/判断某条记录是否存在public boolean checkRecord(MapString,Object args);2. 一个实现DAO接口的具体类,把对数据库的操作(比如最基本的CRUD增删改査操作)全 部封装在里面。具体类中需要实现所有的

5、接口中的方法。但是有时,我们并不需要实现所有的数据 访问方法。此时,可以在接口类中和具体实现类中间再添加一个适配器类。适配器类实 现接口中的所有方法,方法参数返回默认返回值。而具体类则继承此适配器类,选择性 的去重写适配器类中的方法即可。在如下适配器类中,我们还可以在构造方法中,传递 Context 对象,创建单例的 SQLi teOpenHelper对象,并且向具体实现类,提供获取SQL it eDa tabase的方法。比如面的 getDB 方法:/* Created by mac on 23/4/16.*适配器类,实现接口方法,并且构造方法中获取SQLiteOpenHelper实例 */

6、public class BaseDaoT implements IBaseDaoTprivate HealthDBHelper healthDBHelper;public BaseDao(Context context)healthDBHelper = HealthDBHelper.getlnstance(context);protected SQLiteDatabase getDB()return healthDBHelper.getReadableDatabase();Overridepublic boolean insert(T t)return false;Overridepubli

7、c boolean update(T t, MapString, Object args)return false;Overridepublic boolean delete(T t, MapString, Object args)return false;Overridepublic ListT selectAll()return null;0verridepublic ListT selectWithArgs(MapString, Object args)return null;Override public T selectSingle(MapString, Object args)re

8、turn null;Overridepublic boolean checkRecord(MapString, Object args)return false; 再定义具体实现类,继承适配器类,重写需要实现的数据访问方法:/* Created by mac on 23/4/16.* 一个实现DAO接口的具体类,把对数据库的操作(比如最基本的CRUD操作)全部封装 在里面*/public class LoreDetailDao extends BaseDaoLoreDetailpublic LoreDetailDao(Context context)super (context);/*插入记录

9、* param loreDetail* return*/public boolean insert(LoreDetail loreDetail)SQLiteDatabase db = getDB();tryContentValues contentValues = new ContentValues();/设置咨询ID contentValues.put(Heal thDB.Heal thTable. COLUMN_LORE_ID,loreDe tail.ge tld();/设置标题 contentValues.put(Heal thDB.Heal thTable. COLUMN_TITLE,

10、loreDe tail.ge tTi tle();/阅读次数 contentValues.put(HealthDB.HealthTable.COLUMN_READ_COUNT,loreDetail.getCount(); /设置时间SimpleDateFormat format 二new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);String time = format.format(new Date(loreDetail.getTime(); contentValues.put(HealthDB.HealthTable.COLUMN_TIME, time);

11、/设置图片地址 contentValues.put(Heal thDB.Heal thTable. COLUMN_IMAGE_URL,loreDe tail.ge tl mg(); /设置浏览还是收藏contentValues.put(Heal thDB.Hea lt hTable. COLUMN_TYPE,loreDe tail.ge tType();/开启事务db.beginTransac tion();/插入数据,返回插入列的rowidlong rowId =db.inser t( Hea lt hDB.Hea lt hTable. NAME, null,co ntentV alues)

12、;/ -1if (rowId != -1)return true;catch (Exception e)e.pri ntSt ackTrace();finally/结束事务db.endTransac tion();/关闭数据库db.close();return false;/*检查数据是否存在* param args 表字段二值* return*/Overridepublic boolean checkRecord(MapString, Object args)SQLiteDatabase db = getDB();Cursor cursor = null;try/ select title

13、from tb_hea1th where 1=1 and loreld = ?StringBuilder whereArgs = new StringBuilder(l = 1 );Set Map.E ntr yS tri ng, Objec tset 二 args.en tr ySe t();String params = new Stringset.size();int index = 0;for (Map.EntryString, Object entry : set)whereArgs.append( and +en tr y.ge tKey()+ = ?); paramsindex+

14、 = Stri ng.valueOf(en tr y.ge tV alue();/ select title from tb_health where loreld = ?cursor = db.query(Heal thDB.Hea lt hTable.NAME,new StringHealthDB.HealthTable.COLUMN_TITLE, whereArgs .toStri ng(),params,null, null, null);if (cursor.moveToNext()return true;下面附上,对应的数据库表结构类Heal thDB,使用静态类引用表名,字段,和脚本: /* Created by mac on 22/4/16.*数据库表结构对象,使用静态类引用表名,字段,和脚本*/public class HealthDBpublic static final class HealthTable/表名public static final String NAME = tb_health;/列名public static final String COLUMN_TITLE = title; pub

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号