Andorid提高--数据持久化
对于数据的存储和访问是android的很重要的一块内容,比如参数的保存,文件的访问,数据库的存储和访问,对内容提供者的建立和访问等等。
这里我们就对下面的这些存储方式进行一下剖析:
------------------------------------------------------------------------------------------------
1) sharedpreferences
应用场景:保存简单、少量的键值对数据,一般用作应用参数的保存
实现:XML文件
好处:比自己写代码更简单
看一段保存数据的代码:
//得到一个实现Editor接口的对象,文件模式为private模式,表示只有当前应用可以访问并且新的文件内容会覆盖旧的文件内容
SharedPreferences.Editor editor = getSharedPreferences("test",MODE_PRIVATE).edit();
//在文件中加入键值对 text为键 内容为hello 当前内容在内存中 且存在于editor对象中
editor.putString("text", "hello");
//把内容提交给preference对象 对数据进行保存 文件保存在data/data/包名/shared_prefs中 文件名没加后缀 因为系统自动会给文件补加.xml
editor.commit();
下面是一段读取内容的代码:
//得到preference对象
SharedPreferences prefs = getSharedPreferences("test", MODE_PRIVATE);
//得到text键对应的内容
String restoredText = prefs.getString("text", null);
//可以把内容赋值给一个textview组建进行显示
if (restoredText != null) {
mSaved.setText(restoredText, TextView.BufferType.EDITABLE);
2) 应用程序内的数据保存
非键值对格式、或者自定义格式、数组字符串等
相对少量的字符串
例如:{”asfas“, "asfasfd", "132123"}
//打开一个输出流 如果文件不存在 系统会自动创建
FileOutputStream openFileOutput = openFileOutput("test.txt", MODE_APPEND);
//这里用了通用的字符流读写方式 把"test"转换为byte写入文件中
openFileOutput.write("test".getBytes());
文件的读取:
//打开一个输入流连接到test.txt文件上
FileInputStream openFileInput = openFileInput("test.txt");
//创建一个字节数组输出流 把文件读取的内容先暂时存到内存中
ByteArrayOutputStream stream = new ByteArrayOutputStream();
//创建一个1k的缓冲
byte[] buffer = new byte[1024];
int length = -1;
//判断是否读到了文件的末尾
while ((length = openFileInput.read(buffer)) != -1){
//由于文件最后的读入不一定是1024,所以用参数length来保证
stream.write(buffer, 0, length);
}
//把字节流转换为字符串
String str = stream.toString();
3)External store SD卡
场景:较大或者大量的文件
例如:极品飞车、实况足球等大型游戏,
数据包安装到SD卡上,节省内存空间。
缺点:读取速度相对内存较慢,以时间换空间
SDCard路径: "/mnt/sdcard/test.txt"
读写方式和应用程序内的数据类似
"/mnt/sdcard/"的目录可以用Environment.getExternalStorageDirectory()得到
File file = new File(Environment.getExternalStorageDirectory(), filename);
但是需要注意添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4) 数据库SQLite
在Android中使用数据库的场景:
有大量相同类型数据需要增删改查
a) 联系人、短信、多媒体等系统应用
b) 管理类应用,比如Launcher、SoftMarket
SQLite步骤:
a) 声明一个类,继承SQLiteOpenHelper
b) 覆写onCreate()/onUpgrade()/构造方法
public XXXSQLiteHelper(Context context){
super(context, "test.db", null, 1);
}
c) 创建数据库辅助类的实例(new XXXSQLiteHelper())
d) 通过helper.getWritableDatabase()获取数据库访问实例
e) 用SQLiteDatabase的execSQL()方法实现增删改
用rawQuery()方法实现查询
创建表:
String sql = "CREATE TABLE person (personid integer primary key autoincrement, name varchar(20), phone VARCHAR(12) NULL)"
db.execSQL(sql);
插入语句:
SQLiteDatabase db = mDBHelper.getWritableDatabase();
db.execSQL("insert into person(name, phone) values(?, ?)", new String[]{"tom", "13812312312"});
升级表
db.execSQL("ALTER TABLE person ADD salary VARCHAR(12) NULL");
插入数据
SQLiteDatabase db = mHelper.getWritableDatabase();
db.execSQL("insert into person(name, phone) values(?, ?)", new String[]
{"tom", "13812312312"});
查询数据
SQLiteDatabase db = mHelper.getWritableDatabase();
Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]
{"1"});
if (cursor.moveToFirst())
{
int personid1 = cursor.getInt(cursor.getColumnIndex("personid"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
System.out.println();
}
更新数据
db.execSQL("update person set name=?, phone=? where personid=?", new Object[]
{"tom", "18675510130", 1});
删除数据
"delete from person where personid=?", new Object[]{1}
转载于:https://blog.51cto.com/3489316/657692
Andorid提高--数据持久化相关推荐
- 数据持久化框架为什么放弃Hibernate、JPA、Mybatis,最终选择JDBCTemplate!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框 ...
- Java 数据持久化系列之池化技术
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 在上一篇文章Java 数据持久化系列之JDBC中,我们了解到使用 ...
- iOS中几种数据持久化方案总结
概论 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件(属性列表) ...
- Spring Cloud Alibaba基础教程:Nacos的数据持久化
<Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...
- Redis数据持久化
总的来说有两种持久化方案:RDB和AOF RDB方式按照一定的时间间隔对数据集创建基于时间点的快照. AOF方式记录Server收到的写操作到日志文件,在Server重启时通过回放这些写操作来重建数据 ...
- 重启redis命令_redis系列之——数据持久化(RDB和AOF)
在数据库(如mysql)和缓存(如redis)的发展中,都会相互借鉴对方的长处来弥补自身的不足.比如mysql作为持久化数据库,为了提高数据的访问速度,会使用缓存技术,当一条sql查询完成后,mysq ...
- iOS - 数据持久化之 FMDB 的使用
前言 上一篇文章「iOS - 使用 SQLite 数据库实现数据持久化」,介绍了如何使用 sqlite3 操作 SQLite 数据库实现增删改查.但是在代码编写的过程中,我们发现 sqlite3 需要 ...
- jooq实体 和mysql_几个数据持久化框架Hibernate、JPA、Mybatis、JOOQ的比较
因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template. Hibernate ...
- 【redismemcached】数据类型、内存管理、数据持久化和集群管理的区别
这几年redis很火,redis也常常被当做memcached的挑战者被提到桌面上来.关于redis和memcached的比较比比皆是.然而,redis真的在功能.性能以及内存使用效率上都超越memc ...
- 漫游Kafka设计篇之数据持久化
转载注明出处:http://blog.csdn.net/honglei915/article/details/37564595 Kafka视频教程同步首发,欢迎观看! 不要畏惧文件系统! Kafka大 ...
最新文章
- windows程序设计 c语言,【教程】基于C语言的Windows编程入门
- 考研结束了,使用SpringBoot开发一个考研管理系统
- grub-和grub-troubleshootting
- 基于LBS的兴趣点查询
- android kotlin面试题,Kotlin面试25题
- boost::intrusive::offset_ptr用法的测试程序
- Vue学习----webpack跨域问题proxyTable
- MyBatis-Plus_AR 模式
- golang(5)使用beego 开发 api server 和前端同学拆分开发,使用swagger
- 谁在控制着 iCloud 中国区账号的密钥?
- python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)
- 【LeetCode】Python之旅 1-2
- java实现汽车租赁系统
- 效率源linux,效率源希捷硬盘修复(4.2版)及程序下载
- 4r照片尺寸是多大_数码照片4D、4R、6RW是什么意思?4R照片尺寸是多大图片?
- chart metadata is missing these dependencies
- WP个人主题源码Cosy3.1.3
- 蓝牙RFCOMM协议
- 浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解
- 网格化管理服务系统,携同用户创新共进步
热门文章
- mysql tree 和 hash_mysql_B-tree索引和哈希索引
- 帆软单元格以HTML显示内容(点击更改herf值和onclik值)
- 六下计算机教学总结,六年级信息技术教师教学工作总结
- proteus三输入与非门名字_商标取名大全-有创意的2020商标名字大全
- 从零构建一个图像分类项目 -- 代码
- MySQL创建新连接时,不能成功连接的问题
- CS224N笔记——神经机器翻译与Attention机制
- LeetCode每周刷题(2019.6.24-2019.6.30)
- 自定义View合辑(2)-饼状图
- Vue.js 5 @慕课网