专题一====Android五种数据存储方式

Android数据的四种存储方式

SharePreferences

SQLite

Contert Provider

File

网络存储

作为一个完整的应用程序,数据存储的操作是必不可少的。

Android系统提供了四种存储数据方式。分别为:SharePreferenceSQLiteContent ProviderFile。但由于Android系统中,数据基本是私有的,都是存放于”data/data”程序包名目录下,所以要实现数据共享,正确方式是使用Content Provider

 

SQLiteSQLite是一个轻量级的数据库,支持基本的SQL语法,是常被采用的一种数据存储方式。

Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的api

 

SharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。

 

File: 即常说的文件(I/O)存储方法,常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。

 

ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。

URI3个部分组成:"content://"、数据的路径、标识ID(可选)

 

======================================================================

1SQLite数据存储

======================================================================

SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别为:

NULL:空值

INTEGER:整数

REAL:浮点数

TEXT:字符串

BLOB:大数据

SQLite中,并没有专门设计BOOLEANDATE类型,因为BOOLEAN型可以用INTEGER01代替truefalse,而DATE类型则可以拥有特定格式的TEXTREALINTEGER的值来代替显示,为了能方便的操作DATE类型,SQLite提供了一组函数,

详见:http://www.sqlite.org/lang_datefunc.html。这样简单的数据类型设计更加符合嵌入式设备的要求。关于SQLite的更多资料,请参看:http://www.sqlite.org/ 

 

Android系统中提供了anroid.database.sqlite包,用于进行SQLite数据库的增,删,改,查工作,其主要方法如下:

 beginTransaction(): 开始一个事务。

 close(): 关闭连接,释放资源。

 delete(String table, String whereClause, String[] whereArgs): 根据给定条件,删除符合条件的记录。

 endTransaction(): 结束一个事务。

 execSQL(String sql): 执行给定SQL语句。

 insert(String table, String nullColumnHack, ContentValues values): 根据给定条件,插入一条记录。 

 openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory): 根据给定条件连接数据库,如果此数据库不存在,则创建。

 query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy): 执行查询。

 rawQuery(String sql, String[] selectionArgs): 根据给定SQL,执行查询。

 update(String table, ContentValues values, String whereClause, String[] whereArgs): 根据给定条件,修改符合条件的记录。

  除了上诉主要方法外,Android还提供了诸多实用的方法,总之一句话:其实Android访问数据库是一件很方便的事儿。

 





可以清晰的在查询结果中,红线上下的数据是完全一致的,也就是说queryrawQuery方法在的不同仅仅在于所需参数的不同。rawQuery方法需要开发者手动写出查询SQL,而query方法是由目标表名、where子句、order by子句、having子句等诸多子句由系统组成SQL语句。两方法同返回Cursor对象,所以两方在使用时孰优孰劣,就看具体情况了。本人更喜欢rawQuery的方式,因为此方式更接近传统Java开发,也可以由专业DBA来书写SQL语句,这样更符合MVC的思想,而且这样的代码可读性更高。(query方法里面参数实在太多,有点记不住谁是order by子句,谁是having子句了)

 

Cursor对象可以理解为游标对象,凡是对数据有所了解的人,相信对此对象都不会陌生,在这里机不再累述。只提醒一点,在第一次读取Cursor对象中的数据时,一定要先移动游标,否则此游标的位置在第一条记录之前,会引发异常。

 

 

 

2.案例:

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值