Android中数据储存的方式
来源:互联网 发布:网络恐怖主义犯罪案例 编辑:程序博客网 时间:2024/05/21 19:28
Android数据储存的方式
Hi,众猿们,今天说说Android中数据储存的方式,主要方式有四种:SharedPreference(共享参数对象),SQLite数据库,文件,网络储存。其中SharedPreference中储存的是一组组的键值对,比较简单,其使用步骤如下:
- 调用Context对象的getSharedPreference方法获取共享参数对象。
- 若是获取共享参数中的数据,直接调用getXXX方法即可,若是向共享参数中存放数据,要调用共享参数对象的edit方法获取Editor对象,这时我们就可以调用Editor对象的putXXX方法向共享参数中添加数据了,在添加完对象后要调用commit方法提交修改。
接下来是SQLite数据库,学习过数据库的猿猿应该不会觉得SQLite数据库应该不会陌生,SQLite数据库和MySQL数据库很像,它支持标准的SQL数据库语言,是一种轻量级的数据库,更适宜于用在安卓程序中,要掌握SQLite数据库。下面说说使用SQLite数据库时常要用到的类和方法:
SQLiteOpenHelper:用于帮助我们获取数据库实例的对象,在使用时我们需要继承该类并复写其构造方法、onCreate方法和onUpgrate方法。
下面分别介绍其个方法:
1.构造方法:有四个参数:
- Context context:上下问对象,
- String name : 数据库名称
- CursorFactory factory : 游标工厂对象,一般之间传入null就可以了
- int version : 数据库的版本号
2.onCreate方法 :在初次创建数据库对象的时候调用,该方法会传入一个SQLiteDatabase实例,我们要在该方法中完成创建数据库的工作
3.onUpgrade方法:当我们在创建SQLiteOpenHelper对象时传入的version参数与数据库的版本号不一样时调用,在该方法中我们需要 完成数据库的升级操作,如增加字段、数据表等,其参数为:
SQLiteDatabase db : 数据库对象,我们要使用该对象完成数据库的升级
int oldVersion : 数据库原来的版本号
int newVersion :数据库新的版本号
在执行升级数据库操作时,我们可以直接调用onCreate方法,当然,还有一种更合理的方法,在后面的代码中我本猿猿会说说的。
SQLiteDatabase:数据实例对象,我们一般是通过该对象完成对数据库的增删改查操作 该对象的获得:通过SQLiteOpenHelper对象的getReadableDatabase方法获取只读的数据库实例,getWritableDatabase方法获取可写的数据库实例 通过该对象执行对数据库的增删改查操作,SQLiteDatabase为我们提供了如下两组方法,第一组为: database.insert(table, nullColumnHack, values) database.delete(table, whereClause, whereArgs) database.update(table, values, whereClause, whereArgs) database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy) database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) 其中查询方法的参数的意思为(如果大家熟悉sql语句的话,这个表很好理解): ![参数说明](http://img.blog.csdn.net/20160420104259884) SQLiteDatabase对象为我们提供的第二组方法为: database.execSQL(sql) : 执行一条不带占位符的非查询sql语句 database.execSQL(sql, bindArgs) :执行一条带占位符的非查询sql语句,其中第二个参数为占位符的值 database.rawQuery(sql, selectionArgs) : 执行一条查询sql语句,其中第二个参数为占位符的值 本猿猿建议大家还是多采用第二组方法吧,因为我们使用第一种方法时,编译器会把个各参数拼接成一条sql语句,再调用第二组的方法去执行,如果我们直接使用第一个方法的话,在性能上就会好点儿。 SQLiteDatabase的下一组方法如下,用于开启及结束事务(事务神马的就不细说了,学过数据库的都知道),使用简单,就不多说了: database.beginTransaction() database.setTransactionSuccessful() database.endTransaction() 另外还有一个方法:database.close(),即关闭数据库的方法。在Android中一般数据库一旦开启了,我们会一直保持连接而不去关闭它,因为SQLite是一种轻量级的关系型数据库,始终保持连接不会消耗很多资源的,不断的关了再连反而更耗资源,而且如果我们使用了SQLiteDatabase对象后再去关闭它,下一次使用时很容易出错。 Cursor :游标对象,由SQLiteDatabase对象的查询方法返回,我们在执行数据库的查询操作时,查询结果会被重新组成表格返回,其列就是我们的查询列,我们要通过游标对象遍历该表的每一行,这样就可以得到查询结果。在刚被返回时,游标对象默认指向结果表的第零行。其重要方法有: cursor.moveToNext(): 将游标移向结果表的下一行,并返回true,若游标已处于结果表的最后一行则不做任何操作,直接返回false。 cursor.getColumnIndex(columnName): 根据结果表的列名返回该列的索引号。 cursor.getXXX(columnIndex): 根据列的索引号和游标所处的行返回该行该列对应的数据。 上面是Cursor的最常用方法,Cursor对象的其它方法就不多说了,大家可以去看看开发文档。 在实际使用时,本猿猿一般自定义SQLiteOpenHelper对象,负责数据库的创建和升级工作,并对外提供SQLiteDatabase对象,另外,还会创建一个对象(我们暂且称之为DataBase对象吧)来管理自定义SQLiteOpenHelper对象,负责对外提供对数据库的增删改查方法,该对象会被设置为单例的。如果大家有更好的方法的话,欢迎与本猿猿联系
下面是本猿猿使用SQLite数据库的基本框架:
public class DataCacheDBHelper extends SQLiteOpenHelper{ public static final String CREATE_TABLE = "创建数据库的sql语句,程序有几张表就要写几个"; public DataCacheDBHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE);//执行建表语句,创建数据表 } /** * 用于执行数据库升级的方法,假设当前是第4版 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch(oldVersion){ case 1: //数据库从第一版到第二版的变化写在这儿 ; case 2: //数据库从第二版到第三版的变化写在这儿 ; case 3: //数据库从第三版到第四版的变化写在这儿 ; //注意,每个case语句后面都不要加break,这样当用户跨版本升级(如从第一版升级到第四版)时,每一版本的数据库的变化都 //能执行到 } }}
public class DataCacheDB { public static final String DB_NAME = "datacache";//记录数据库的名称 public static final int VERSION = 1;//记录数据库的版本号 private static DataCacheDB dataCacheDB;//静态的本类对象,保证其在内存中的唯一性 private SQLiteDatabase database;//用于对数据库进行增删改查操作 /** * 构造方法私有化,保存其不会在外部被new出来 */ private DataCacheDB(){ DataCacheDBHelper dataCacheDBHelper = new DataCacheDBHelper(MyApplication.getContext(), DB_NAME, null, VERSION); database = dataCacheDBHelper.getWritableDatabase(); } public static DataCacheDB getInstance(){ if (dataCacheDB == null) { dataCacheDB = new DataCacheDB(); } return dataCacheDB; } //对数据库进行增删改查操作的方法,需要使用SQLiteDatabase对象,因为其参数和返回值都不确定,所以本猿猿在方法上都加了泛型,大家有兴趣就自己去实现下吧 public <Parameter> void saveOrUpdate(Parameter parameter){} public <Parameter> void delete(Parameter parameter){} public <Parameter, Result> Result query(Parameter parameter){return null;}}
- Android中数据储存的方式
- Android中常用的数据储存方式
- android数据的5中储存方式
- Android的数据储存方式
- Android的数据储存方式
- Android中数据储存方式的几种工具类
- Android 数据储存的方式之本地数据库储存
- Android下的数据储存方式
- wemall app商城源码Android数据的SharedPreferences储存方式
- android数据储存之存储方式
- Android--数据储存方式(5种)
- Android 里的数据储存
- Android 中 activity 的生命周期和数据储存
- 数据储存方式-SharedPreferences
- 数据储存方式-SQLite
- 数据储存方式
- 数据储存方式SQLite
- 【Android学习】Android数据的四种储存方式(1)--SharedPreferences
- Spring的CharacterEncodingFilter过滤字符编码
- 软件设计师(4)--常见基础错题
- hdu2602 Bone Collector--01背包
- NullPointerException at com.android.volley.Request.<init>(Request.java:130)
- 商业智能让营销更精确
- Android中数据储存的方式
- Linux与时间相关的结构体及相关用法
- vtune性能分析工具--找出程序性能瓶颈
- ReactiveCocoa概述及编程思想简章
- 08-图7 公路村村通
- HttpClient4.5.2编程
- mysql 数据库授权(给某个用户授权某个数据库)
- C++ 基础杂项
- cmd启动jetty