Android常见的数据存储方式:
- 系统配置暂存的轻量级存储,SharedPreferences。
- 系统中的中小型存储机制,File存储。
- 系统中的相对大型存储机制,SQLite。
目录
1 SharedPreferences
是一种轻量级数据存储机制
1.1适用情况
- 要存储的数据格式简单。
- 都是普通的字符串,标准类型的值。
- 一般用来存储应用程序的配置信息等。
1.2使用
SharedPreferences存储数据采用key/value的形式
SharedPreferences本身是一个接口,无法创建实例,一般通过的getSharedPreferences()方法获得实例,其中形式有:
- MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
- MODE_MULTI_PROCESS:多进程形式.
- MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
- MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入
SharedPreferences接口本身没有提供写入数据的能力,而是通过一个内部接口Editor类的对象来实现的。
通过SharedPreferences的edit()方法获得本对象的Editor对象。
1.2.1 SharedPreferences的本程序内写入方式:
prefenences = getSharedPreferences(sharename, MODE_PRIVATE);
Editor ed = preferences.edit();
ed.put***(key,value);
ed.commit();
1.2.2 SharedPreferences的本程序内读取方式:
prefenences = getSharedPreferences(sharename, MODE_PRIVATE);
value = preferences.get***(key,default);
1.3 本质
SharedPreferences的本质是文件读写。
位置是 /data/data/<packagename>/shared_prefs/shared_name
1.4 读写其它应用程序的SharedPreferences的步骤
- 前提创建的SharedPreferences全区可读写的。
- 创建对应的Context。 context =creatPackageContext(包名, 权限);
- 通过context.getSharedPreferences获得对象。
- 如需读出数据。 value = preferences.get***(key,default); 如需写入数据。 Editor ed = preferences.edit(); ed.put***(key,value);
2 File存储
同JavaSE一样,Android对于文件的操作通过流来实现。
- FileInputStream
- FileOutPutStream
一般常见的Android的文件处理分为两类:
- 本应用程序内部的数据文件。
- SD卡上的文件。
2.1 应用程序内部的数据文件的读写
Context提供了如下两个方法来获得文件的IO流:
- FileInputStream openFileInput(name)
- FileoutPutStream openFileOutput(name,mode)
- MODE_RPIVTE:该文件只能被当前程序读写。
- MODE_APPEND:以追加的方式打开该文件,允许应用程序向 该文件中追加内容。
- MODE_WORLD_READABLE:该文件可以被其他程序读取。
- MODE_WORLD_WRITEABLE:该文件可以被其他程序读写。
Context提供了如下方法来访问数据文件夹
- getDir(name, mode) :在应用程序的数据文件夹下获取name对应的子目录。
- File getFilesDir() :获取应用程序数据文件夹的绝对路径。
- String[] fileList():返回应用程序数据文件夹的全部文件。
- deleteFile(String) :删除应用程序数据文件夹某个文件。
2.2 SD卡上的文件读写
SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地用于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。
2.2.1SD卡和手机存储空间的优缺点:
SD卡存储速度相对较慢,但是空间相对较大。
SD卡在使用过程中需要进行检查和判断。
2.2.2 读写SD卡上的文件的步骤:
判断是否手机插入SD卡,并且程序有读写SD卡的权限。
Environment.getExternalStorageState().equals(android
.os.Environment.MEDIA_MOUNTED);
获得SD卡的外部目录getExternalStorageState()。
使用常用的流操作进行SD卡的文件读写。
- FileInputStream
- FileOutputStream
- FileReader
- FileWriter
2.2.3读写SD卡上的文件的注意事项:
手机插入SD卡,在AVD中通过mksdcard命令来创建。
获得读写SD卡的权限需要在AndroidManifest.xml中添加读写权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3 SQLite
3.1 简介
SQLite,是一款轻型的数据库,它的设计目标是嵌入式产品,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
3.2 操作
3.2.1 操作方法
Android中使用SQLiteDatabase代表数据库,并且提供一系列的方法来操作数据:
3.2.2操作步骤
获取SQLiteDatabase对象,它代表与数据库的连接。
调用SQLiteDatabase的方法来执行SQL语句。
操作SQL语句的执行结果。
关闭SQLiteDatabase,回收资源。
3.3 事务处理
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。
SQLiteDatabase采用如下方法来控制事务:
- beginTransaction()
- endTransaction()
- inTransaction()
- setTransactionSuccessful()
db.beginTransaction();
try {
// 执行事务中的很多sql语句
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
3.4 OpenHelper类
- SQLiteDatabase中判断表是否存在的话使用try-catch方式判断是否有异常。
- Android提供SQLiteOpenHelper类来管理数据库。主要负责数据库的创建、版本更新,一般情况通过创建它的子类并扩展onCreate()和onUpgrade()方法来实现。
- SQLiteOpenHelper类常用方法:
- SQLiteDatabase getReadableDatabase()。
- SQLiteDatabase getWritableDatabase()。
- abstract void onCreate():第一次创建数据库的回调。
- abstract void onUpgrade():数据库版本更新的回调。
- void close():关闭所有打开的SQLiteDatabase。
这样的话大家使用SQLiteOpenHelper来操作数据,就无需使用SQLiteDatabase的静态方法创建数据库实例了。
注意:
用getReadableDatabase, getWriteableDatabase打开数据库时,如果数据库的磁盘空间满了就会打开失败。