Android中数据储存的方式

来源:互联网 发布:网络恐怖主义犯罪案例 编辑:程序博客网 时间:2024/05/21 19:28

Android数据储存的方式
Hi,众猿们,今天说说Android中数据储存的方式,主要方式有四种:SharedPreference(共享参数对象),SQLite数据库,文件,网络储存。其中SharedPreference中储存的是一组组的键值对,比较简单,其使用步骤如下:

  1. 调用Context对象的getSharedPreference方法获取共享参数对象。
  2. 若是获取共享参数中的数据,直接调用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;}}
0 0
原创粉丝点击