• Android--持久化技术


    1.Android中的持久化技术主要有三种:
      1)文件存储;
      2)SharedPreference存储;
      3)数据库存储(SQLite);
    2.文件存储:
      1)Context 类中提供了一个 openFileOutput() 方法,可以用于将数据存储到指定的文件中。
        --openFileOutput() 方法的两个参数:
          ①文件名,不包括路径(路径默认为/data/data/<packagename>/files/);
          ②文件的操作模式,主要有两种:MODE_PRIVATE 和 MODE_APPEND,MODE_PRIVATE是默认的操作模式,表示操作文件时将覆盖文件内容,MODE_APPEND则是继续在文件中添加内容;
        --该方法的返回值为 FileOutputStream 对象,可使用 Java IO流来进行操作;
      2)Context 类还提供了一个openFileInput() 方法,该方法用于读取文件;
        --该方法只有一个参数,即文件名;
        --返回值为 FileInputStream 对象;
      3)文件存储的方式并不适合用于保存一些较为复杂的文本数据;
    2.SharedPreference存储:
      1)SharedPreferences 是使用键值对的方式来存储数据的;
      2)Android中 使用 SharedPreferences 对象来存储数据,有三种方式获取SharedPreferences对象:
        ① Context 类中的 getSharedPreferences()方法:它有两个参数,第一个是文件名,若文件不存在,则自动创建,文件存储在/data/data/<packagename>/shared_prefs/目录下;第二个参数是指定操作模式,主要有两:MODE_PRIVATE 和 MODE_MULTI_PROCESS,MODE_PRIVATE是默认模式,表示只有当前应用可以对这个 SharedPreferences 文件进行读写;MODE_MULTI_PROCESS用于多个进程对一个SharedPreferences文件进行读写;
        ② Activity 类中的 getPreferences()方法:它只接收一个操作模式参数,因为使用这个方法时会自动将当前活动的类名作为 SharedPreferences 的文件名;
        ③ PreferenceManager 类中的 getDefaultSharedPreferences() 方法:这是一个静态方法,它接收一个Context 参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences 文件。
      3)使用 SharedPreferences 对象来存储数据:
        ① 调用SharedPreferences 对象的edit()方法来获取一个SharedPreferences.Editor 对象。
        ② 向SharedPreferences.Editor 对象中添加数据,比如添加一个布尔型数据就使用 putBoolean 方法,添加一个字符串则使用putString()方法,以此类推。
        ③ 调用commit()方法将添加的数据提交,从而完成数据存储操作。
        ④ 读取数据时可以使用SharedPreferences 对象的 getXXX()方法读取,如 getString(),getInt()等,getXXX() 方法有两个参数,第一个为键名,第二个为默认值,当无法找到匹配键名的内容时使用该默认值;

    3.SQLite数据库存储:

      1)SQLite 是一款轻量级的关系型数据库,它的运算速度非常快,占用资源少;

      2)Android 提供了一个 SQLiteOpenHelper 帮助类,借助这个类就可以非常简单地对数据库进行创建和升级;它是一个抽象类,使用时需自定义类来继承它,并重写onCreate() 方法和 onUpgrade() 方法;

      3)SQLiteOpenHelper 中提供了两个方法: getReadableDatabase() 和 getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。

      4)CRUD操作:

        --insert(table, null, contentValues):插入数据;

        --update(table, contentValues, where, whereArgs):修改数据;

        --delete(table, where, whereArgs):删除数据;

        --query(table, columns, selection, selectionArgs, groupBy, having, orderBy):查询数据;

        --可以直接通过 sql 语句来操作数据库,其中增删改可以使用 SQLiteDatabase 的 execSQL(sql) 方法,查询可以使用 rawQuery(sql) 方法;

      5)事务的使用:

        --调用 SQLiteDatabase 的 beginTransaction() 方法来开启事务;

        --若所有操作都执行完毕,则调用 setTransactionSuccessful() 方法表示事务执行成功;

        --最后在finally 中调用 endTransaction() 方法结束事务;

      6)SQLite升级技巧:

        --在 onUpgrade() 方法中使用 switch(oldVersion) 判断旧版本是哪一个版本,然后执行响应的升级操作;

        --switch 的每一个 case 分支中都不使用 break语句,这样可以保证任何版本在升级时可以升级到最新的版本;

    4.总结:文件适用于存储一些简单的文本数据或者二进制数据,SharedPreferences 适用于存储一些键值对,而数据库则适用于存储那些复杂的关系型数据;

  • 相关阅读:
    java poi 操作
    java map 根据 map的value值进行排序
    Windows navcat 连接虚拟机mysql
    如何阻止Windows广告窗口弹出
    python gitlab 学习笔记
    Java的家庭记账本程序(D)
    《程序员修炼之道:从小工到专家》的阅读笔记(二)
    Java的家庭记账本程序(C)
    Java的家庭记账本程序(B)
    Java的家庭记账本程序(A)
  • 原文地址:https://www.cnblogs.com/tengtao93/p/5259702.html
Copyright © 2020-2023  润新知