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

作者: IM_RisingSun | 来源:发表于2016-12-07 13:35 被阅读153次

    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 表示私有 只有自己可以访问

    相关文章

      网友评论

        本文标题:《Android基础》------2.存储方式

        本文链接:https://www.haomeiwen.com/subject/qsmdmttx.html