版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android 数据存储1)PreferenceSharedPreferences 也是一种轻型的数据存储方式,它的本质是基于 XML文件存储key-value 键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下(可以通过Eclipse下的FileExplorer查看创建的问题)。SharedPreferences 对象本身只能获取数据而不支持存储和修改,存储修改是通过 Editor对象实现。SharedPreferences 支持三种访问模式私有(MODE_PRIVATE ):仅有创建程序有权限对其进行读取或写入全局读(MODE_WORLD_READABLE ):表示当前文件可以被其他应用读取全局写(MODE_WORLD_WRITEABLE ):表示当前文件可以被其他应用写入实现步骤如下:一、根据Activity类的方法获取SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定,第二个参数指定文件的操作模式。二、使用SharedPreferences 接口的edit()方法获取 Editor对象。三、通过Editor对象接口的 putXxx和GetXxx方法存取 key-value 键值对数据。四、通过commit()方法提交数据。例:SharedPreferencessp=getSharedPreferences(PREF_FILE,MODE);Editoreditor=sp.edit();editor.putString("Name",str1);editor.putString("Number",str2);mit();// 提交修改//获取数据StringName=sp.getString("Name","NULL");//清除数据editor.clear();// 清除所有值editor.remove("Number");// 清除某一项//配置变更监听器当多个应用共享配置时,可以添加配置变更监听器,监听配置是否发生变化sp.registerOnSharedPreferenceChangeListener(newSharedPreferences.OnSharedPreferenceChangeListener() {@OverridepublicvoidonSharedPreferenceChanged(SharedPreferencessharedPreferences,Stringkey){}});SharedPreferences 对象与SQLite数据库相比:优点:免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。缺点:只能存储boolean,int,float,long和String五种简单的数据类型;无法进行条件查询等。2)FileAndroid使用的是基于 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
卡映像没有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-permission<!-- 往SDCard写入数据权限 --><uses-permission模拟器SD卡镜像:1.创建SDcard镜像文件mksdcard[-llabel]<size><file>-llabel 为SD卡创建一个卷标,可选项;例:mksdcard1024Msdcard.img2.关联sdcard和模拟器I.通过AVDManager,编辑虚拟机的SDCard关联选择,选中相关的镜像文件;硬件配置需选择支持SDCardsupportII.emulator.exe-avd模拟器名称-sdcardsd卡镜像的绝对或者相对路径emulator.exe-avd2.2-sdcard../sdcard/sdcard.img3.将文件拷贝到sdcard上adbpush<local><remote>例:adbpushfoo.txtsdcard/adbpushE:\test.3gpsdcard/test.3gp4.安装其他apkadbinstall***.apk5.拟器中使用SD卡文件Devtools里面Mediascannerscan 一下媒体文件3)SqliteAdnroid 中通过SQLite数据库引擎来实现结构化数据存储。库引擎,针对内存等资源有限的设备提供的一种高效的数据库引擎。
SQLite是一个嵌入式数据支持基本 SQL语法,是常被采用的一种数据存储方式。主要特点:轻量级SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用 SQLite 一般只需要带上它的一个动态 库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本 为例,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/<packagename>/databases
目录下
;通过SQL语句创建数据库:创建表:CREATETABLEperson(personidintegerprimarykeyautoincrement,namevarchar(20))查询语句:select*from排序子句select*fromperson
表名
where
条件子句
groupby
分组字句
having...orderbyselect*frompersonorderbyiddescselectnamefrompersongroupbynamehavingcount(*)>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=10SQLITE_MASTER 表:SQLite数据库的对象信息 (表、视图、序列、索引等等)被保存在一个名叫 "sqlite_master"的特殊的表中。你可以像查询其它表一样通过执行 “SELECT”查询这个特殊的表。例如:sqlite>select*fromsqlite_master;但你不能在 sqlite_master 表中执行诸如 DROPTABLE,UPDATE,INSERT 或者DELETE 命令。sqlite_master 表在你创建、删除和索引数据库时自动更新这个表。你不能手工更改 sqlite_master 表。TEMPORARY 表的结构没有存储在 "sqlite_master" 表中,由于 TEMPORARY 表对应用是不可见的,而不是应用程序创建这个表。 TEMPORARY 表结构被存储在另外一个名叫"sqlite_temp_master" 的特定的表中。 "sqlite_temp_master" 表是临时表自身。通过adbshell 进入手机系统sqlite3people.dbCREATE TABLE peopleinfo (_idinteger primary keyautoincrement, name textnotnull,ageinteger,heightfloat); //创建表insertintopeopleinfovalues(null,'Tom',21,1.81);// 插入deletefrompeopleinfowhere_id=2// 删除select*frompeopleinfo //查询droptablepeopleinfo// 删除数据表.tables//查看数据表格是否创建成功;通过Android 提供的接口创建Android 提供了创建和使用数据库的相关 API:SQLiteDatabase 类:代表数据库对象,提供了操作数据库的一些方法 :创建、插入,删除、修改、查询等;SQLiteDatabase 的常用方法方法 描述用于打开或创建一个数据库(对于sqlite来说,publicstaticSQLiteDatabaseopenOrCreateDatabase就是打开或产生一个数据库文件),参数中的File类就是java中表示系统文件路径的(Stringpath,SQLiteDatabase.CursorFactoryfactory)File类,而SQLiteDatabase.CursorFactory则是一个产生Cursor对象的工厂类publiclonginsert(Stringtable,StringnullColumnHack,用于在数据库中加入数据。ContentValue类似于java中HashMap类,用于以键值对的方式保存ContentValuesvalues)数据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. onU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于2024年度市场需求的房产买卖合同2篇
- 产品订货合同范文
- 工程材料采购合同
- 人教版九年级化学第四单元自然界的水4化学式与化合价课时4有关相对分子质量的计算教学课件
- 基于2024年度的智能家居系统开发合同
- 青年员工职业发展规划银行文档
- 农商银行新员工培训文档
- 新车销售代购合同范本
- 护理与安全用药与管理
- 2024年度版权许可合同:音乐作品授权使用协议2篇
- 劳动创造美好生活中职生劳动教育PPT完整全套教学课件
- 统编人教版高中地理必修第一册全册教案教学设计(含教学计划教学进度表问题研究章末综合测试卷及答案)
- 医院器械科呼吸机巡查表
- 详解宣贯公安机关信访工作规定内容课件
- 全广州版英语六年级上册单词带音标
- 山东中医药高等专科学校工作人员招聘考试真题2022
- 厨房天然气风险辨识表
- 网络工程师培养计划
- 箱变常见故障及处理
- 中华优秀传统文化知到章节答案智慧树2023年青岛黄海学院
- 大学英语写作知到章节答案智慧树2023年齐齐哈尔医学院
评论
0/150
提交评论