Android的数据存储形式

本文详细介绍了Android平台上的多种数据存储方式,包括File、SharedPreference、SQLite及ContentProvider的特点和应用场景,适合Android开发者深入了解和选择合适的存储方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


SharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。
存储数据的类型:  boolean, float, int, long, String
数据保存的路径:  /data/data/packageName/shared_prefs/yyy.xml
可以设置数据只能是当前应用读取, 而别的应用不可以

应用卸载时会删除此数据

SharedPreferences: 对应sp文件的接口

context. getSharedPreferences (String name, int mode): 得到SP对象

name: 文件名(不带.xml)

mode: 生成的文件模式(是否是私有的,即其它应用是否可以访问)

Editor sp.edit() : 得到Editor对象

Xxx sp.getXxx(name,defaultValue): 根据name得到对应的数据

Editor : 能更新sp文件的接口

 Editor putXxx(String name, Xxx  value) : 保存一个键值对, 没有真正保存到文件中

Editor remove(name)

commit(): 提交, 数据真正保存到文件中了


SD卡存储:文件类型: 任意

数据保存的路径: 

路径1: /storage/sdcard/Android/data/packageName/files/

路径2: /storage/sdcard/xxx/

路径1 :其它应用可以访问,应用卸载时删除

路径2 : 其它应用可以访问, 应用卸载时不会删除

必须保证sd卡挂载在手机上才能读写, 否则不能操作

Environment :  操作SD卡的工具类

得到SD卡的状态:Environment.getExternalStorageState() 

得到SD卡的路径:Environment.getExternalStorageDirectory()

SD卡可读写的挂载状态值:Environment.MEDIA_MOUNTED

context. getExternalFilesDir():  

得到/mnt/sdcard/Android/data/pageckage_name/files/xxx.txt


操作SD卡的权限:

android.permission.WRITE_EXTERNAL_STORAGE

应用运行需要保存一系列有一定结构的数据, 比如说公司员工信息

文件类型: .db

数据保存的路径: /data/data/projectPackage/databases/xxx.db

默认情况下其它应用不能访问, 当前应用可以通过ContentProvider提供其它应用操作

应用卸载时会删除此数据


SQLite:SQLite是一个轻量级的数据库,支持基本的SQL语法,是常被采用的一种数据存储方式。 Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的api

特点:

安装文件小: 最小只有几百K, Android系统已经安装

支持多操作系统: Android, WP, IOS, Windows, Linux等

支持多语言: 比如 Java 、 PHP、C#等. 

处理速度快:  处理速度比Mysql, Oracle, SqlServer都要快(数据量不是特别大)

Sqlite中的一个数据库就是一个.db文件(本质上.db的后缀都可以不指定)

Sqlite操作数据库的sql语句基本与mysql一样,  但需要注意下面2个点:

最大的不同在于创建表时可以不用指定字段类型, Sqlite可以适时的自动转换, 但除varchar类型外最好指定类型

Sqlite中的主键名称建议使用_id


操作数据库的方法:

create table employee (
       _id integer primary key autoincrement, /*主键,自增长*/
       name varchar,                /*字符串*/
       salary double,                                /*小数*/
       birthday date                                /*日期, 可直接插入日期格式字符串*/

)

SQLiteOpenHelper: 数据库操作的抽象帮助类

SQLiteOpenHelper(Context context, String name, 

CursorFactory factory, int version) : 构造器, 指定数据库文件名和版本号

abstract void onCreate(SQLiteDatabase db) : 用于创建表

abstract void onUpgrade() : 用于版本更新

SqliteDatabase getReadableDatabase() : 得到数据库连接

long insert(): 用于执行insert SQL, 返回id值

int update(): 用于执行update SQL

int delete(): 用于执行delete SQL

Cursor query(): 用于执行select SQL, 返回包含查询结果数据的Cursor

void execSql(sql) : 执行sql语句

void close()  关闭数据库的连接,释放资源

beginTransaction(): 开启事务

setTransactionSuccessful(): 设置事务是成功的

endTransaction(): 结束事务, 可能提交事务或回滚事务

openDatabase(String path, CursorFactory factory, int flags):  得到数据库连接

nt getCount() : 匹配的总记录数

boolean moveToNext() : 将游标移动到下一条记录的前面

Xxx getXxx(columnIndex) : 根据字段下标得到对应值

int getColumnIndex(columnname): 根据字段名得到对应的下标

void close():关闭游标,释放资源

SQLiteOpenHelper: 数据库操作的抽象帮助类

SQLiteOpenHelper(Context context, String name, 

CursorFactory factory, int version) : 构造器, 指定数据库文件名和版本号

abstract void onCreate(SQLiteDatabase db) : 用于创建表

abstract void onUpgrade() : 用于版本更新

SqliteDatabase getReadableDatabase() : 得到数据库连接


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









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值