• Android Studio(数据存储)


    数据存储方式

    方式特点
    文件存储openFileInput()和openFileOutput()进行存写
    SharedPreferences以XML格式进行存储
    SQLite运算快、占用资源少、支持基本的sql语法
    ContentProvider可用于应用之间的数据交互
    网络存储通过网络提供的存储空间来存储/获取数据信息

    文件存储

    主要语法
    1. FileOutputStream fos = openFileOutput(String filename,int mode);
    2. FileInputStream fis = openFileInput(String filename);
    modedesc
    Context.MODE_PRIVATE该文件为当前程序私有
    Context.MODE_APPEND该文件的内容可以追加
    Context.MODE_WORLD_READABLE该文件的内容可以被其他程序“读”
    Context.MODEL_WORLD_WRITEABLE该文件的内容可以被其他程序“写”
    代码示例
    1. //参考对象为内存:从内存输出即写入、输入到内存即读取
    2. // 1.写入数据到文件
    3. String fileName = "myfile.txt";
    4. String data = "Hello, World!";
    5. try {
    6. FileOutputStream fos = openFileOutput(fileName, Context.MODE_PRIVATE);
    7. fos.write(data.getBytes());
    8. fos.close();
    9. } catch (IOException e) {
    10. e.printStackTrace();
    11. }
    12. // 2.从文件中读取数据
    13. try {
    14. FileInputStream fis = openFileInput(fileName);
    15. InputStreamReader isr = new InputStreamReader(fis);
    16. BufferedReader br = new BufferedReader(isr);
    17. StringBuilder sb = new StringBuilder();
    18. String line;
    19. while ((line = br.readLine()) != null) {
    20. sb.append(line);
    21. }
    22. fis.close();
    23. String savedData = sb.toString();
    24. } catch (IOException e) {
    25. e.printStackTrace();
    26. }

    SharedPreferences

    简要

    XML方式的轻量级存储,适合存储少量的键值对数据,适用于简单的配置信息、用户偏好设置和应用程序状态等,比如登录的用户名。

    语法
    1. // 存储数据到 SharedPreferences
    2. SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
    3. SharedPreferences.Editor editor = sharedPreferences.edit();
    4. editor.putString("key", "value");
    5. editor.apply();
    6. // 从 SharedPreferences 中读取数据
    7. String savedValue = sharedPreferences.getString("key", "default value");

    SQLite

    语法
    1. // 1. 创建实现类extends SQLiteOpenHelper
    2. public class DBHelper extends SQLiteOpenHelper {
    3. private static final String DATABASE_NAME = "myDb.db";
    4. private static final int DATABASE_VERSION = 1;
    5. private Context context;
    6. public DBHelper(Context context) {
    7. super(context, DATABASE_NAME, null, DATABASE_VERSION);
    8. this.context = context;
    9. }
    10. @Override
    11. public void onCreate(SQLiteDatabase db) {
    12. }
    13. @Override
    14. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    15. }
    16. }
    17. // 2. 创建实现类对象,并调用相关方法实现CRUD
    18. DBHelper dbHelper = new DBHelper(context);
    19. SQLiteDatabase db = dbHelper.getWritableDatabase();
    20. Cursor cursor = db.rawQuery("SELECT * FROM myTable", null);
    21. while (cursor.moveToNext()){
    22. int id = cursor.getInt(cursor.getColumnIndexOrThrow("id"));
    23. ...
    24. }
    25. cursor.close();
    ContentValues

        SQLiteDatabase对象自身提供了一些CRUD方法,像表记录添加、修改,理应上需要我们传入多个字段(包括字段名和字段值),而为了解决这个问题就有了ContentValues对象,它允许我们给其增加多个键(字段名)、值(字段值);

        所以当我们执行这个SQLiteDatabase对象的自身提供的添加或修改方法只用传入ContentValues即可。

        可以参考下面代码例子:

    1. ContentValues values = new ContentValues();
    2. values.put("name", "John Doe");
    3. values.put("age", 30);
    4. values.put("email", "johndoe@example.com");
    5. // 插入数据到数据库
    6. long newRowId = db.insert("myTable", null, values);

    后言

        至于ContentProvider和网络存储这两种存储方式只有结合具体的需求项目才能更好地学习,这里就不介绍了,需要学习的可以自己搜索相关文章具体学习。

  • 相关阅读:
    DNS 系列(一):为什么更新了 DNS 记录不生效?
    解决结构赋值中函数的this指向问题
    openGL glMatrixMode()函数介绍
    cmake 项目。qt5升级 qt6 报错 error: “Qt requires a C++17 compiler 已解决
    SpringBoot项目的创建(一):通过idea的Spring Initializr来创建(需联网以下载SpringBoot相关的模板)
    十道Linux常见的面试问题
    Hadoop IPC‘s epoch 8 is less than the last promised epoch 9 ; journal id:
    L2-035 完全二叉树的层序遍历(Python)
    uniapp公共新闻模块components案例
    设计模式:装饰模式
  • 原文地址:https://blog.csdn.net/m0_60633107/article/details/134255622