《Android基础》------2.存储方式

Android的数据存储方式

前言:随着Android的兴起,Android为更多的开发者所青睐,随之伴随着一些问题。有开发平台不同,个体中问题处理方法也是不同的,今天我们来讲解一下Android的这五种数据存储方式,一来方便自己查阅、复习和巩固基石,而来也能解开大家心中 的疑惑,OK,让我们走起!

常识知识普及:

RAM :内存 运行内存
ROM : 内部存储空间 相当于固态硬盘
SD卡 : 外部存储卡


1)内部存储

-cache : 存储临时数据(当系统容量不足时会自动删除文件夹中的数据)
this.getCacheDir();能够获取cache的文件夹路径

-files : Android系统不会删除这个目录下的文件
this.getFilesDir();能够获取files文件夹路径
//获取files目录下的savedata.text文件的输出流(写入)
openFileOutput("savedata.txt",0);
//获取files目录下的savedata.text文件的输入流(读取)
openFileInput("savedata.txt");

-路径 : /data/data/包名。。。/


2)外部存储

-路径 : /mnt/sdcard/

-获取路径系统API
//无论任何Android厂商获取的都是sd卡的地址
File file = Environment.getExternalStorageDirectory();
String filePath = filess.getAbsolutePath();

-获取SD卡的状态
String sdCardState = Environment.getExternalStorageState();
if(sdCardState.equals(Environment.MEDIA_MOUNTED)){
Toast.makeText(this, "sd卡已插入", 0).show();
}else if(sdCardState.equals(Environment.MEDIA_UNMOUNTED)) {
Toast.makeText(this, "sd卡拔出", 0).show();
}

-获取SD卡可用空间大小
File file = Environment.getExternalStorageDirectory();
//获取可用空间大小 byte类型
long freeSpace = filess.getFreeSpace();
//格式化空间大小 B KB MB GB TB
String formatFileSize = Formatter.formatFileSize(this, freeSpace);


3)SharedPrefrence存储

-路径 : /data/data/包名/shared_prefs/
-应用场景 : 用来存储配置信息
-存储
1)初始化SharedPreferences对象 "config"表示存储的文件名
SharedPreferences sp = getSharedPreferences("config", 0);//初始化sp对象

>2)拿到编辑器
    Editor edit = sp.edit();

>3)存储数据
    edit.putBoolean("status", status);//第一个参数是状态名  第二个参数是状态值

>4)提交(重要)
    edit.commit();
    
>-**读取**        :
    sp.getBoolean("status", false);//第一个参数是状态名  第二个参数是默认值

  > **注意:保存的时候会自动添加后缀名 .xml (config.xml)**

4)网络存储(重要)

应用场景:比如头像、价格。。。都会存储在网络服务器之上
网络存储比较重要也相对复杂会单独用一章进行讲解


5)数据库存储(重要)

《Android基础》------3.SqLite数据库的使用详解

Sqlite数据库

  • 开源的
  • 轻量的
  • sql的增删改查语句和mysql很像

数据库的创建

  • java在硬盘上创建文件 :
  //在内存中创建指向D盘的文件对象
    File file=new File("D://data.txt");
    //用file对象在硬盘上创建一个文件
    FileOutputStream fos=new FileOutputStream(file);
    fos.write("hello".getBytes());
    fos.close();
  • **Android在手机上创建数据库文件** :
    
      1)在内存中创建数据库帮助类对象
        2)用数据库对象去创建文件
        路径:/data/data/包名/databases/
  • 第一次创建数据库的时候会调用 onCreate();
    这方法值调用一次 比较适合用于创建收库的表
    // 创建数据库的表
    db.execSQL("create table stu(_id integer primary key autoincrement,name varcher(20),num varcher(20))");
  • //在升级的时候修改表 onUpgrade();
    db.execSQL("alter table stu add stopdate varcher(20)");
  • 数据库升级(注意事项)
    数据库的版本升级时调用
    version递增 不能降级

数据库的创建:

//在内存中创建数据库对象 使用数据库帮助类进行创建
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
dbHelper.getWritableDatabase();

数据库帮助类:

package yingxininfo.net.netidcard.data;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class MyDbOpenHelper extends SQLiteOpenHelper {

private static final String Tag = "MyDbOpenHelper";

 /**
 * 
 * @param context
 *            上下文
 * @param name
 *            数据库名称
 * @param factory
 *            游标(null用默认的游标工厂)
 * @param version
 *            数据库版本 >=1的整数
 */
public MyDbOpenHelper(Context context) {
    super(context, "student.db", null, 1);
    // TODO Auto-generated constructor stub
    Log.i(Tag, "数据库帮助类对象创建");
}

/**
 * 只在第一次创建数据库的时候调用 
 * 比较适合用来创建数据库的表
 */
@Override
public void onCreate(SQLiteDatabase db) {
    //
    Log.i(Tag, "onCreate方法被调用了!");
    // 创建数据库的表
    db.execSQL("create table stu(_id integer primary key autoincrement,name varcher(20),num varcher(20))");
    Log.i(Tag, "数据库表创建成功!");
}

/**
 * 数据库的版本升级时调用  数据库只可升级不可降级 升级时能够修改表结构
 */
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
    // TODO Auto-generated method stub
    Log.i(Tag, "onUpgrade方法被调用了,数据库版本升级了");
}
}

数据库的增删改查

-增加
insert into 表名 (‘字段名’....)values('字段名对应的数据'....)
例子:insert into stu ('name','num','startdate','stopdate')
values('risingsun','123456789011111111','20220211','20660211')

-查询 select * from 表名 查询表中所有的数据
select * from stu

-修改 update 表名 set 字段名=“” where 字段名=“”
update stu set name='happy' where _id=4 把_id为4的 数据的名字改为‘happy’

-删除 delete form 表名 where 字段=“”
delete FROM stu WHERE _id=3 删除表中_id为3的一行数据

注意:写这些操作数据库的语句最好在可视化数据库工具中编写运行后再写入我们的程序 能够最大程度的防止sql语句出错 切记


Android下文件访问权限(非常重要)

-原理:使用的是Linux系统文件的权限
默认情况下:Android应用程序只能读取自己的应用数据不能读取别的应用程序的数据

  • rw- rw- ---
    第一位表示: 文件的类型 d:表示文件夹 - :表示文件
    前三位表示: 当前用户的权限
    中间三位表示:当前用户所在的组的权限
    最后三位表示: 其他用户

r:读取(read)
w:写入(write)

四中常见的文件格式
1)只读
openFileOutput("private.txt", MODE_WORLD_READABLE);//MODE_WORLD_READABLE==1 只读
2)只写
openFileOutput("readable.txt", MODE_WORLD_WRITEABLE);//MODE_WORLD_WRITEABLE
3)可读可写
openFileOutput("writeable.txt", MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE);//表示可读可写
4)私有
openFileOutput("publicable.txt", MODE_PRIVATE);//MODE_PRIVATE==0 表示私有 只有自己可以访问

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容