美文网首页APP & programandroid
Android中数据持久化技术

Android中数据持久化技术

作者: BlueSocks | 来源:发表于2023-01-30 16:08 被阅读0次

1、文件存储

文件存储不会对存储的数据进行任何的格式化处理,所有数据都是原封不动的保存到文件中,适合存储一些简单的文本数据或二进制数据。


Ⅰ文件写入openFileOutput()

/**
     * 写入数据
     */
    private void writeData(String text){

        FileOutputStream out = null;
        BufferedWriter writer = null;
        try {
            out = openFileOutput("test", MODE_PRIVATE);                 // 两个参数:参数1是文件保存的文件名,参数2是保存模式,MODE_PRIVATE是如果文件已存在则替换,MODE_APPEND是文件已存在就在原文件拼接新数据
            writer = new BufferedWriter(new OutputStreamWriter(out));
            writer.write(text);
        }
        catch (IOException e){
            e.printStackTrace();
        }
        finally {
            try {
                if (writer != null)writer.close();
            }
            catch (IOException e){
                e.printStackTrace();
            }
        }
    }

Ⅱ文件读取openFileInput()

/**
     * 读取数据
     */
    private String readData(String fileName){

        if (fileName.isEmpty()) return null;

        FileInputStream input = null;
        BufferedReader reader = null;
        StringBuilder stringBuilder = new StringBuilder();

        try {
            input = openFileInput(fileName);
            reader = new BufferedReader(new InputStreamReader(input));

            String line = "";
            while ((line = reader.readLine()) != null){
                stringBuilder.append(line);
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
        finally {
            try {
                if (reader != null) reader.close();
            }
            catch (IOException e){
                e.printStackTrace();
            }
        }

        return stringBuilder.toString();
    }

2、sharedPreferences存储

使用键值对存储数据,支持多种不同的数据类型存储,读取和写入数据格式不变。


sharedPreferences存储首先要获取SharedPreferences实例对象,根据所在的不同的类有不同的获取方法,如下:

/**
 * Context类中获取
 *
 * parmas name: 传入文件名,如果文件名不存在就新建一个该名文件;
 * parmas model: 传入操作模式,目前只有MODE_PRIVATE这种模式可用,也是默认模式;
 */
 getSharedPreferences("login", MODE_PRIVATE);

/**
 * Activity类中获取,文件名默认为Activity类名
 *
 * parmas model: 传入操作模式,默认模式;
 */
 getPreferences(MODE_PRIVATE);

/**
 * PreferenceManager类中获取,默认使用应用程序包名作为文件名前缀
 *
 * parmas context: 传入所在上下文;
 */
 PreferenceManager.getDefaultSharedPreferences(this);

Ⅰ存储数据

/**
     * 存储数据
     */
    private void saveData(){

        // 获取SharedPreferences实例
        SharedPreferences preferences = getSharedPreferences("login", MODE_PRIVATE);

        // 获取Editor实例
        SharedPreferences.Editor editor = preferences.edit();

        // 获取数据
        String account = accountET.getText().toString();
        String password = passwordET.getText().toString();

        // 通过键值添加数据
        editor.putString("account", account);
        editor.putString("password", password);
        editor.putBoolean("isRemmber", true);

        // 提交数据
        editor.apply();
    }

Ⅱ读取数据

/**
     * 读取数据
     */
    private void readData(){

        // 获取SharedPreferences实例
        SharedPreferences preferences = getSharedPreferences("login", MODE_PRIVATE);

        // 读取数据
        String account = preferences.getString("account", "");
        String password = preferences.getString("password", "");
        Boolean isRemmber = preferences.getBoolean("isRemmber",false);

        // 控件赋值
        accountET.setText(account);
        passwordET.setText(password);
        remmberCB.setChecked(isRemmber);
    }

Ⅲ清空数据

/**
     * 清空数据
     */
    private void clearData(){

        // 获取SharedPreferences实例
        SharedPreferences preferences = getSharedPreferences("login", MODE_PRIVATE);

        // 获取Editor实例
        SharedPreferences.Editor editor = preferences.edit();

        // 清空数据
        editor.clear();
    }

Tips:如果使用SharedPreferences直接保存用户名、密码等重要数据是不靠谱的,至少得将这些数据按照一定规则加密之后再保存到文件中!

3、SQLite存储

可用于存储大量的复杂的关系型数据,


Ⅰ创建数据库
新建一个MyDataBaseHelper类继承自SQLiteOpenHelper,并重写onCreate和onUpgrade方法,调用MyDataBaseHelper类的构造函数即可创建一个dbHelper,通过getWritableDatabase方法就可以获取到数据库

/**
 * 创建数据库
 *
 * parmas context:上下文
 * parmas name:数据库名称
 * parmas factory:允许在查询数据时返回一个自定义的Cursor,一般传null
 * parmas version:数据库版本
 * return dbHelper:返回一个dbHelper实例对象,调用getWritableDatabase()方法就可以获取到数据库
 */
 MyDataBaseHelper dbHelper = new MyDataBaseHelper(this, "DataCache.db", null, 2);
 SQLiteDatabase db = dbHelper.getWritableDatabase();

Ⅱ更新数据库
直接调用创建数据库方法,传一个不同的数据库版本号会自动调MyDataBaseHelper类中的onUpgrade方法,在方法内更新数据库操作即可

/**
 * 更新数据库
 */
 MyDataBaseHelper dbHelper = new MyDataBaseHelper(this, "DataCache.db", null, 2);

Ⅲ创建表

/**
 * 创建表
 *
 * 1、获取可操作数据库
 * 2、调用execSQL方法执行SQL语句删除表
 */
 SQLiteDatabase db = dbHelper.getWritableDatabase();
 db.execSQL("create table Book (id integer primary key autoincrement, author text, price real, pages integer, name text)");

Ⅳ删除表

/**
 * 删除表
 *
 * 1、获取可操作数据库
 * 2、调用execSQL方法执行SQL语句删除表
 */
 SQLiteDatabase db = dbHelper.getWritableDatabase();
 db.execSQL("drop table if exists Book");

Ⅴ插入数据

/**
 * 插入数据
 * 
 * parmas table:要插入的表名
 * parmas nullColumnHack:空值自动赋值null,一般用不到直接传null就行
 * parmas factory:允许在查询数据时返回一个自定义的Cursor,一般传null
 * parmas values:要插入的数据实例对象
 */
 ContentValues values = new ContentValues();
 values.put("author", "Lee");
 values.put("price", 9.98);
 values.put("pages", 496);
 values.put("name", "How are you");

 SQLiteDatabase db = dbHelper.getWritableDatabase();
 db.insert("Book", null, values);

Ⅵ更新数据

/**
 * 更新数据
 *
 * parmas table:要插入的表名
 * parmas values:要更新的数据实例对象
 * parmas whereClause:SQL查询条件
 * parmas whereArgs:查询条件参数数组,依然顺序从数据取值赋给前面查询条件中的?占位符
 */
 ContentValues updateValue = new ContentValues();
 updateValue.put("price", 10.99);

 SQLiteDatabase db = dbHelper.getWritableDatabase();
 db.update("Book", updateValue, "name=?", new String[]{"How are you"});

Ⅶ删除数据

/**
 * 删除数据
 *
 * parmas table:指定删除数据的表名
 * parmas whereClause:指定查询条件
 * parmas whereArgs:为查询条件的占位符提供具体值
 */
 SQLiteDatabase db = dbHelper.getWritableDatabase();
 db.delete("Book", "pages > ?",new String[]{"500"});

Ⅷ查询数据

/**
 * 查询数据
 *
 * parmas table:指定查询的表名
 * parmas columns:指定查询的列名
 * parmas section:指定查询条件
 * parmas sectionArgs:为查询条件的占位符提供具体值
 * parmas groupBy:指定需要groupBy的列
 * parmas having:对groupBy的结果进一步约束
 * parmas orderBy:指定查询结果的排序方式
 * return cursor:返回一个可操作的cursor对象,操作cursor对象即可获取具体数据
 */
 SQLiteDatabase db = dbHelper.getWritableDatabase();
 Cursor cursor = db.query("Book",null, null, null, null, null, null);

相关文章

  • 《第一行代码》阅读笔记 (4)

    一、Android持久化技术简介 Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储、...

  • 傻傻分不清楚系列(一):SharedPreferences的co

    一、简介 在开发中,很多重要的瞬时数据都需要保存起来让数据持久化,即 Android 中的数据持久化技术。相信这个...

  • Android 数据持久化

    Android 数据持久化 在 Android 中数据持久化的方式有以下几种。 SQLiteSQLiteOpenH...

  • 一文搞懂android内部存储和外部存储

    我们在开发Android应用的过程中,避免不了要用到数据持久化技术,所谓的数据持久化就是将RAM中的瞬时数据保存到...

  • 第六章 数据存储全方案,详解持久化技术

    6.1持久化技术简介 持久化是将内存中的数据存储在存储设备的过程.Android提供文件存储,SharedPref...

  • GreenDao使用指南

    GreenDAO介绍 在日常的Android开发中我们或多或少都会需要数据的持久化,Android中数据的持久化有...

  • Android中数据持久化技术

    1、文件存储 文件存储不会对存储的数据进行任何的格式化处理,所有数据都是原封不动的保存到文件中,适合存储一些简单的...

  • 第一行代码(六)

    第六章内容主讲数据持久化技术 一、数据持久化技术简介   数据持久化技术就是将瞬时数据(存储在内存中,有可能会因为...

  • Android数据持久化之数据库的使用

    android开发中数据持久化 轻量级数据持久化一般使用sp,大量数据的持久化就必须考虑使用本地数据库了 Andr...

  • JDBC

    JDBC 持久化和持久化技术 持久化技术概念 把数据保存到可掉电式的存储设备中,持久化的实现过程大多是通过各种关系...

网友评论

    本文标题:Android中数据持久化技术

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