android应用之SQLite数据库
android系统内嵌了SQLite数据库,优点是处理速度快,占用内存少
在android应用中,围绕着数据库的操作主要是通过SQLiteDatabase来完成的,该类封装了以下方法:
方法用途execSQL(sql)执行sql脚本,通常用来创建或管理数据库表格rawQuery(sql,selectionArgs)执行select查询操作(sql语句的方式)query(..)执行select查询操作(api的方式)insert(table,nullColumnHack,values)向指定table中新增记录update(table,values,whereClause,whereArgs)更新指定table中的指定记录delete(table,whereClause,whereArgs)删除指定table中的指定记录通过这些方法便可完成对数据库的增删改查操作,同时SQLiteDatabase也引入了对事物的支持
beginTransaction():开启事物
endTransaction():提交或回滚事物
相对于web应用来讲,移动客户端的本质区别在于系统的访问是单用户的,没有并发操作。因此,在数据库不存在并发写操作的前提下,事物的处理是可以不去考虑的。
SQLiteDatabase是通过SQLiteOpenHelper来获取的,该类是一个抽象类,开发基于数据库存储的android应用时,需要继承该类,构建出自己的SQLiteOpenHelper实例并覆盖其超类所声明的抽象方法:
onCreate(SQLiteDatabase db):用于创建数据库表格
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion):用于更新数据库表结构
有了SQLiteOpenHelper之后,便可通过其getWritableDatabase()方法获取SQLiteDatabase对象,用以完成对数据库的CURD操作。
public class DaoContext {private Map<String,IBaseDao<?>> daoMap;private static DaoContext instance=new DaoContext();private DaoContext(){daoMap=new HashMap<String,IBaseDao<?>>();}public static DaoContext getInstance(){return instance;}public void addDao(IBaseDao<?> dao){String daoName=dao.getClass().getSimpleName();removeDao(daoName);daoMap.put(dao.getClass().getSimpleName(),dao);dao.open();}public void removeDao(String daoName){if(daoMap.containsKey(daoName)){daoMap.remove(daoName);IBaseDao<?> dao=getDao(daoName);dao.close();}}public IBaseDao<?> getDao(String daoName){return daoMap.get(daoName);}public void clear(){for(Entry<String, IBaseDao<?>> entry:daoMap.entrySet()){IBaseDao<?> dao=entry.getValue();dao.close();}daoMap.clear();}}