Android数据存储总结资料Word文档下载推荐.docx
- 文档编号:6424055
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:14
- 大小:125.62KB
Android数据存储总结资料Word文档下载推荐.docx
《Android数据存储总结资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Android数据存储总结资料Word文档下载推荐.docx(14页珍藏版)》请在冰点文库上搜索。
//获取数据
StringName=sp.getString("
"
NULL"
);
//清除数据
editor.clear();
//清除所有值
editor.remove("
//清除某一项
//配置变更监听器
当多个应用共享配置时,可以添加配置变更监听器,监听配置是否发生变化
sp.registerOnSharedPreferenceChangeListener(newSharedPreferences.OnSharedPreferenceChangeListener(){
@Override
publicvoidonSharedPreferenceChanged(SharedPreferencessharedPreferences,Stringkey){
System.out.println("
onSharedPreferenceChanged"
}
});
SharedPreferences对象与SQLite数据库相比:
优点:
免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。
缺点:
只能存储boolean,int,float,long和String五种简单的数据类型;
无法进行条件查询等。
2)File
Android使用的是基于Linux的文件系统,程序开发人员可以建立和访问程序自身的私有文件,也可以访问保存在资源目录中的原始文件和XML文件,还可以在SD卡等外部存储设备中保存文件。
也支持标准Java的IO类和方法。
读写数据两种方式:
方式一:
Android系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,文件存储在系统下的/data/data/<
packagename>
/files目录中。
主要接口:
FileInputStreamfis=openFileInput(filename);
//读取数据
FileOutputStreamfos=openFileOutput(filename);
//写入数据
Android系统支持四种文件操作模式
模式
说明
MODE_PRIVATE
私有模式,缺陷模式,文件仅能够被文件创建程序访问,或具有相同UID的程序访问。
MODE_APPEND
追加模式,如果文件已经存在,则在文件的结尾处添加新数据。
MODE_WORLD_READABLE
全局读模式,允许任何程序读取私有文件。
MODE_WORLD_WRITEABLE
全局写模式,允许任何程序写入私有文件。
//写数据
StringFILE_NAME="
fileDemo.txt"
;
FileOutputStreamfos=openFileOutput(FILE_NAME,Context.MODE_PRIVATE)
Stringtext=“Somedata”;
fos.write(text.getBytes());
fos.flush();
fos.close();
//读数据
FileInputStreamfis=openFileInput(FILE_NAME);
byte[]readBytes=newbyte[fis.available()];
fis.read(readBytes);
//删除文件
deleteFile(FILE_NAME);
方式二:
FileOutputStreamfos=newFileOutputStream(file绝对路径);
FileInputStreamfos=newFileInputStream(file绝对路径);
例SD读写操作:
首先需要检测系统的/sdcard目录是否可用;
如果不可用,则说明设备中的SD卡已经被移除,在Android模拟器则表明SD卡映像没有被正确加载;
如果可用,则直接通过使用标准的Java.io.File类进行访问;
Filedir=newFile(SD_CARD);
if(dir.exists()&
&
dir.canWrite()){
FilenewFile=newFile(dir.getAbsolutePath()+"
/"
+FILE_NAME);
FileOutputStreamfos=null;
try{
newFile.createNewFile();
if(newFile.exists()&
newFile.canWrite()){
fos=newFileOutputStream(newFile);
fos.write(content.getBytes());
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(fos!
=null){
try{
fos.flush();
fos.close();
}
catch(IOExceptione){}
}
}
注:
对SD卡访问需添加:
<
!
--在SDCard中创建与删除文件权限-->
uses-permissionandroid:
name="
android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
/>
--往SDCard写入数据权限-->
android.permission.WRITE_EXTERNAL_STORAGE"
模拟器SD卡镜像:
1.创建SDcard镜像文件
mksdcard[-llabel]<
size>
<
file>
-llabel为SD卡创建一个卷标,可选项;
例:
mksdcard1024Msdcard.img
2.关联sdcard和模拟器
I.通过AVDManager,编辑虚拟机的SDCard关联选择,选中相关的镜像文件;
硬件配置需选择支持SDCardsupport
II.
emulator.exe-avd模拟器名称-sdcardsd卡镜像的绝对或者相对路径
emulator.exe-avd2.2-sdcard../sdcard/sdcard.img
3.将文件拷贝到sdcard上
adbpush<
local>
remote>
adbpushfoo.txtsdcard/
adbpushE:
\test.3gpsdcard/test.3gp
4.安装其他apk
adbinstall***.apk
5.拟器中使用SD卡文件
Devtools里面Mediascannerscan一下媒体文件
3)Sqlite
Adnroid中通过SQLite数据库引擎来实现结构化数据存储。
SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备提供的一种高效的数据库引擎。
支持基本SQL语法,是常被采用的一种数据存储方式。
主要特点:
轻量级
SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。
使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。
而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。
不需要"
安装"
SQLite的核心引擎本身不依赖第三方的软件,使用它也不需要"
。
有点类似那种绿色软件。
单一文件
数据库中所有的信息(比如表、视图等)都包含在一个文件内。
这个文件可以自由复制到其它目录或其它机器上。
跨平台/可移植性
除了主流操作系统windows,linux之后,SQLite还支持其它一些不常用的操作系统。
弱类型的字段
同一列中的数据可以是不同类型
操作模型:
SQLite数据库采用了模块化设计,由8个独立的模块构成,这些独立模块又构成了三个主要的子系统,模块将复杂的查询过程分解为细小的工作进行处理。
Ø
接口由SQLiteCAPI组成,因此无论是应用程序、脚本,还是库文件,最终都是通过接口与SQLite交互
编译器
✓由分词器和分析器组成
✓分词器和分析器对SQL语句进行语法检查,然后把SQL语句转化为底层能更方便处理的分层的数据结构,这种分层的数据结构称为“语法树”
✓把语法树传给代码生成器进行处理,生成一种针对SQLite的汇编代码最后由虚拟机执行
虚拟机
✓SQLite数据库体系结构中最核心的部分是虚拟机,也称为虚拟数据库引擎(VirtualDatabaseEngine,VDBE)
✓与Java虚拟机相似,虚拟数据库引擎用来解释执行字节代码
✓虚拟数据库引擎的字节代码由128个操作码构成,这些操作码主要用以对数据库进行操作,每一条指令都可以完成特定的数据库操作,或以特定的方式处理栈的内容
后端
✓后端由B-树、页缓存和操作系统接口构成
✓B-树的主要功能就是索引,它维护着各个页面之间的复杂的关系,便于快速找到所需数据
✓页缓存的主要作用就是通过操作系统接口在B-树和磁盘之间传递页面
✓B-树和页缓存共同对数据进行管理
SQLite支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象,大数据)数据类型.
虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。
例如:
可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。
但有一种情况例外:
定义为INTEGERPRIMARYKEY的字段只能存储64位整数,当向这种字段中保存除整数以外的数据时,将会产生错误。
另外,SQLite在解析CREATETABLE语句时,会忽略CREATETABLE语句中跟在字段名后面的数据类型信息。
数据库都保存在各自的/data/data/<
/databases目录下;
通过SQL语句创建数据库:
创建表:
CREATETABLEperson(personidintegerprimarykeyautoincrement,namevarchar(20))
查询语句:
select*from表名where条件子句groupby分组字句having...orderby排序子句
如:
select*fromperson
select*frompersonorderbyiddesc
selectnamefrompersongroupbynamehavingcount(*)>
1
分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
select*fromAccountlimit5offset3或者select*fromAccountlimit3,5
插入语句:
insertinto表名(字段列表)values(值列表)。
如:
insertintoperson(name,age)values(‘传智’,3)
更新语句:
update表名set字段名=值where条件子句。
updatepersonsetname=‘传智‘whereid=10
删除语句:
deletefrom表名where条件子句。
deletefrompersonwhereid=10
SQLITE_MASTER表:
SQLite数据库的对象信息(表、视图、序列、索引等等)被保存在一个名叫"
sqlite_master"
的特殊的表中。
你可以像查询其它表一样通过执行“SELECT”查询这个特殊的表。
sqlite>
select*fromsqlite_master;
但你不能在sqlite_master表中执行诸如DROPTABLE,UPDATE,INSERT或者DELETE命令。
sqlite_master表在你创建、删除和索引数据库时自动更新这个表。
你不能手工更改sqlite_master表。
TEMPORARY表的结构没有存储在"
表中,由于TEMPORARY表对应用是不可见的,而不是应用程序创建这个表。
TEMPORARY表结构被存储在另外一个名叫"
sqlite_temp_master"
的特定的表中。
"
表是临时表自身。
通过adbshell进入手机系统
sqlite3people.db
CREATETABLEpeopleinfo(_idintegerprimarykeyautoincrement,nametextnotnull,ageinteger,heightfloat);
//创建表
insertintopeopleinfovalues(null,'
Tom'
21,1.81);
//插入
deletefrompeopleinfowhere_id=2//删除
select*frompeopleinfo//查询
droptablepeopleinfo//删除数据表
.tables//查看数据表格是否创建成功;
通过Android提供的接口创建
Android提供了创建和使用数据库的相关API:
SQLiteDatabase类:
代表数据库对象,提供了操作数据库的一些方法:
创建、插入,删除、修改、查询等;
SQLiteDatabase的常用方法
方法
描述
publicstaticSQLiteDatabaseopenOrCreateDatabase(Stringpath,SQLiteDatabase.CursorFactoryfactory)
用于打开或创建一个数据库(对于sqlite来说,就是打开或产生一个数据库文件),
参数中的File类就是java中表示系统文件路径的File类,而SQLiteDatabase.CursorFactory则是一个产生Cursor对象的工厂类
publiclonginsert(Stringtable,StringnullColumnHack,ContentValuesvalues)
用于在数据库中加入数据。
ContentValue类似于java中HashMap类,用于以键值对的方式保存数据
publicintdelete(Stringtable,StringwhereClause,String[]whereArgs)
删除表中的数据
publicCursorquery(booleandistinct,Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit)
查询数据库中的数据,返回查询结果集
publicintupdate(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)
用于修改数据
publicvoidexecSQL(Stringsql)
执行String表示的非查询的SQL语句,例如Create等
publicvoidclose()
用来关闭数据库并释放数据库占用的相关资源
SQLiteOpenHelper类:
该类是SQLiteDatabase一个辅助类。
这个类主要生成一个数据库,并对数据库的版本进行管理。
当在程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。
SQLiteOpenHelper是一个抽象类,我们通常需要继承它,并且实现里面的3个函数:
1.onCreate(SQLiteDatabase)
在数据库第一次生成的时候会调用这个方法。
2.
onUpgrade(SQLiteDatabase,int,int)
当数据库需要升级的时候,Android系统会主动的调用这个方法。
3.
onOpen(SQLiteDatabase):
这是当打开数据库时的回调函数,一般在程序中不是很常使用。
使用了帮助类SQLiteOpenHelper创建数据库,从而避免直接调用SQLiteDatabase中的打开和创建数据库的方法,简化了数据库打开过程中繁琐的逻辑判断过程。
例子参考数据SJCQAPP
补充:
Context类:
Context字面意思是上下文,它是一个抽象类。
位于frameworkpackage的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄。
很多方法需要通过Context才能识别调用者的实例。
Context提供了关于应用环境全局信息的接口,通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:
启动Activity、Service服务、发送广播,接受Intent信息
,读写文件等。
getSharedPreferences
openFileInput/openFileOutput
openOrCreateDatabase
getContentResolver
其他方面的
getSystemService//ALARM_SERVICE/AUDIO_SERVICE//NOTIFICATION_SERVICE
getResources
getPackageManager
Context类的继承关系:
ContentValues类
ContentValues和HashTable类似都是一种存储的机制。
两者最大的区别就在于:
contenvalues只能存储基本类型的数据,像string,int之类的,不能存储对象这种东西;
HashTable却可以存储对象;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 数据 存储 总结 资料