课程内容: 数据存储

  • Android中的内部存储空间的文件存储;
  • Android中sd卡的文件存储;
  • 数据库和sql语句;

一,linux文件系统目录结构

  • linux只有一套文件系统目录结构,唯一的起点称为根目录/,其它分区是通过挂载方式使用。

    d -> /sys/kernel/debug
    路径一开头第一个/叫根目录,后面的/称为路径分隔符

  • linux文件类型,d - l
    • d表示是文件夹
    • -表示普通文件,文本文件,二进制文件
    • l软链接 相当于windows的快捷方式

android应用的私有目录

  • data/data/应用包名 这是应用程序私有目录
  • 应用可以读写自己的私有目录,不能读取其他应用的私有目录;读取别的私有目录,会发生文件无法读取的异常;
  • /data/data/应用包名/files 用于存储一般文件,清除数据会有提示
  • 获得目录方式 getFileDir();
  • /data/data/应用包名/catche 存储缓存文件,清除缓存,直接删除
  • 获得目录方式 getCacheDir();
    利用getCacheDir()创建File对象
    File file = new File(getCacheDir(), “cache.txt”);

Context 上下文

  • Context 上下文:为Android 应用程序提供各种功能,资源和服务的环境.相当于一个小区周围的配套环境.

应用程序的日志

PID 进程
TID 线程
断言 assert 在调试中用;

    private static final String TAG = "MainActivity";        //TAG一般写当前类名        Log.v(TAG, "verbose");//输出一般日志信息        Log.d(TAG, "debug");//输出debug信息        Log.i(TAG, "info");//输出info信息        Log.w(TAG, "warn");        Log.e(TAG, "error");

如何锁定横屏(显示的控件不发生界面旋转)呢? 在xml界面的screenOritation 设置一下
Android系统中为每个应用app指定一个uid,不同的应用程序分配的uid是不一样的.
Android中不同的app应用被视为其他用户;
- 没有相应的权限
r 有读权限
w 有写权限
x 有执行权限
chmod 664 private.txt 可以改变权限
安卓把SD卡读写专门做了一个组
安卓组id可以用来SD卡的存储~

Android系统中的文件存储

存储的分类

  • RAM:内存或者主存,带电存储,掉电数据不能保存;
  • ROM:(读的速度快,写的速度慢)内部存储空间;掉电了数据也能保存;(sharepreference,缓存都是属于这部分)
  • SD卡: 可插拔的存储设备;相当于电脑的移动硬盘;

存储方式

  • 内部存储空间存储
  • 1./data/data/包名/shared_prefs/config.xml 用sharePreferences来获得
  • 2./data/data/包名/files/ 用getFilesDir()来获得
  • 3./data/data/包名/catche 用getCacheDir()来获得

SD卡存储

  • 应用程序读写sdcard 需要申请相应权限
    • 读sd卡可能需要申请权限 READ_EXTERNAL_STORAGE
    • 写公用的sdcard 需要申请权限 WRITE_EXTERNAL_STORAGE
  • sdcard路径获得方法

如何获得SD卡的大小?看下面的代码!

Environment.getExternalStorageDirectory()        File file = new File(Environment.getExternalStorageDirectory(),"test.txt");* sdcard当前状态获得 Environment.getExternalStorageState()        if(Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED){

sd卡空间大小

        // 从settings应用中查找到sd卡空间大小获得方法        File path = Environment.getExternalStorageDirectory();        // 获得StatFs对象,可以获得sd卡大小信息        StatFs stat = new StatFs(path.getPath());        long blockSize = stat.getBlockSize();        // stat.getBlockCountLong()        long totalBlocks = stat.getBlockCount();        long availableBlocks = stat.getAvailableBlocks();        Toast.makeText(                this,                "sd卡总空间大小:"                        + Formatter.formatFileSize(this, totalBlocks                                * blockSize), Toast.LENGTH_LONG).show();

**注意:读SD卡时可能需要添加权限;写SD卡一定要权限;
* 应用程序读写SD卡需要申请相应的权限
* 读SD卡可能需要申请权限
* 写公用的SD卡需要申请权限**

数据库

什么是数据库

  • 数据库:存储数据的仓库,使用专门sql语句实现快速的增删改查.相当于电子化的文件柜;

常用的数据库管理 软件

  • 数据库管理软件,相当于档案管理员;
  • Oracle 甲骨文;商用及其广泛
  • SQL Server 微软
  • MySql 开源
  • sqllit 嵌入式,轻量级数据库

数据库和一般文件存储对比

  • 数据库采用数据表方式存储数据,通过索引方式管理,利用sql语句可以实现快速增删改查。

基本sql语句使用CRUD

* 创建数据表:create table 表名(列名 列的类型,...)        CREATE TABLE userinfo (id integer primary key autoincrement,username varchar(20),password varchar(20));* 增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)* 增:insert into 表名 (要插入的列名,...) values (对应列数据,...)        insert into userinfo (id,username,password) values (1,'zhangsan',"abc123")* 删:delete from 表名 where 条件1 or 条件2 and 条件3        delete from userinfo where id=2 or username='lisi'        delete from userinfo    删除表中所有数据* 改:update 表名 set 修改的列名1=值1,修改的列名2=值2 where 条件        update userinfo set password='1234',username='lisi' where id=3* 查:select 要查出列名1,要查出列名2 from 表名 where 条件        select * from userinfo      查出所有数据        select * from userinfo where id=4   指定条件查询        select id,password from userinfo where id=4
  • 例子:
        --select * from data1 where id='1350010'        --select * from data2 where id=381        select location from data2 where id=(select outkey from data1 where id='1350110')

更多相关文章

  1. Android root权限获取原理详解
  2. Android 数据存储(三) 数据库存储
  3. 如何在android中调用数据库资源

随机推荐

  1. mysql中 datatime与timestamp的区别说明
  2. MySQL 8.0新特性之隐藏字段的深入讲解
  3. MySQL中Like概念及用法讲解
  4. 解决windows service 2012阿里云服务器在
  5. 使用Visual Studio Code连接MySql数据库
  6. mysql添加备注信息的实现
  7. 深入理解r2dbc在mysql中的使用
  8. 浅谈Mysql哪些字段适合建立索引
  9. nacos无法连接mysql的解决方法
  10. mysql5.7 设置远程访问的实现