鸿蒙的数据存储API存储和读

数据处理: 使用鸿蒙的数据存储API存储和读

随着智能设备的日益普及,高效、安全地管理设备上的数据成为开发者的首要任务。鸿蒙操作系统(HarmonyOS)作为一款面向未来的全场景分布式操作系统,提供了丰富的API支持,其中数据存储API尤为关键,它帮助开发者轻松实现数据的存储与读取功能。本文将深入探讨如何在鸿蒙系统中利用数据存储API进行数据处理,包括存储和读取操作,并提供实际的代码示例。

鸿蒙数据存储概述

鸿蒙系统的数据存储机制主要分为两种类型:本地存储和分布式数据服务。本地存储适用于单一设备上数据的管理和访问,而分布式数据服务则支持跨设备的数据共享。对于大多数应用场景而言,本地存储已经足够满足需求,如应用偏好设置、用户数据等。

本地存储方式

鸿蒙提供的本地存储方式主要有文件存储、关系型数据库存储(SQLite)、偏好设置存储(Preferences)等。每种存储方式都有其适用场景和特点:

- 文件存储:适合存储大块的二进制数据或文本数据,如图片、视频等。

- 关系型数据库存储:适用于结构化数据的存储,如用户信息、订单详情等。

- 偏好设置存储:用于保存少量的键值对数据,常用于保存应用配置信息。

使用鸿蒙数据存储API

接下来,我们将通过几个具体的例子来展示如何使用鸿蒙的数据存储API进行数据的存储和读取操作。

文件存储示例

假设我们需要在一个应用中存储用户的头像图片。首先,需要获取到文件存储的路径,然后使用`File`类的相关方法完成文件的写入和读取。

存储文件

```java

import ohos.data.file.File;

import ohos.data.file.FileFactory;

public class FileStorageExample {

public void saveImage(byte[] imageData) {

try {

// 获取文件存储路径

File file = FileFactory.createFileByPath("/data/user/0/com.example.myapp/cache/avatar.png");

// 将图像数据写入文件

file.write(imageData);

} catch (IOException e) {

e.printStackTrace();

}

}

}

```

读取文件

```java

public byte[] loadImage() {

try {

// 获取文件存储路径

File file = FileFactory.createFileByPath("/data/user/0/com.example.myapp/cache/avatar.png");

// 从文件中读取图像数据

return file.readAllBytes();

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

```

关系型数据库存储示例

如果应用需要存储用户的信息,可以使用关系型数据库存储。这里我们创建一个简单的用户表,包含用户名和密码字段。

创建数据库和表

```java

import ohos.data.DatabaseHelper;

import ohos.data.rdb.RdbOpenCallback;

import ohos.data.rdb.RdbStore;

import ohos.data.rdb.ValuesBucket;

public class DatabaseHelperExample extends DatabaseHelper {

private static final String DB_NAME = "user.db";

private static final int DB_VERSION = 1;

private RdbStore rdbStore;

public DatabaseHelperExample(Context context) {

super(context, DB_NAME, DB_VERSION);

}

@Override

public void onCreate(RdbStore store) {

String CREATE_TABLE_USER = "CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, password TEXT)";

store.executeSql(CREATE_TABLE_USER);

}

@Override

public void onUpgrade(RdbStore store, int oldVersion, int newVersion) {

// 处理数据库升级逻辑

}

public void openDatabase() {

RdbOpenCallback callback = new RdbOpenCallback() {

@Override

public void onGetRdbStore(RdbStore store) {

rdbStore = store;

}

};

super.getRdbStore(callback);

}

}

```

插入数据

```java

public void insertUser(String username, String password) {

if (rdbStore != null) {

ValuesBucket values = new ValuesBucket();

values.putString("username", username);

values.putString("password", password);

rdbStore.insert("user", values);

}

}

```

查询数据

```java

public List queryUsers() {

List users = new ArrayList<>();

if (rdbStore != null) {

Cursor cursor = rdbStore.query("user", new String[]{"username", "password"}, null, null, null);

while (cursor.moveToNext()) {

String username = cursor.getString(cursor.getColumnIndex("username"));

String password = cursor.getString(cursor.getColumnIndex("password"));

users.add(username + ": " + password);

}

cursor.close();

}

return users;

}

```

偏好设置存储示例

偏好设置存储主要用于保存应用的一些配置信息,比如用户的主题选择、语言偏好等。

存储偏好设置

```java

import ohos.data.preferences.Preferences;

import ohos.data.preferences.PreferencesHelper;

public class PreferencesExample {

private Preferences preferences;

public PreferencesExample(Context context) {

preferences = PreferencesHelper.getPreferences(context, "app_prefs");

}

public void setTheme(int themeId) {

preferences.putInt("theme_id", themeId);

}

}

```

读取偏好设置

```java

public int getTheme() {

return preferences.getInt("theme_id", 0); // 0为默认主题ID

}

```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NLP论文速读(EMNLP 2024)|动态奖励与提示优化来帮助语言模型的进行自我对齐

论文速读|Dynamic Rewarding with Prompt Optimization Enables Tuning-free Self-Alignment of Language Models 论文信息&#xff1a; 简介: 本文讨论的背景是大型语言模型&#xff08;LLMs&#xff09;的自我对齐问题。传统的LLMs对齐方法依赖于昂贵的训练和人类偏好注释&am…

计算机中的网络安全

在本篇中介绍了以下几个方面: 机密性 密码学 对称加密算法(DES, 3DES, AES) 公开秘钥算法 RSA大素数的获取 完整性 散列函数(MD5, SHA-1, 并没有提及算法实现) 报文鉴别(MAC) 数字签名 端点鉴别 应用 SSL(TCP网络安全) 运行时安全 防火墙的基本知识 主要体现在以下几个方…

SLM561A系列60V10-50mA单通道线性恒流LED驱动芯片,为汽车照明、景观照明助力

SLM561A系列选型参考&#xff1a; SLM561A10ae-7G SOD123 SLM561A15ae-7G SOD123 SLM561A20ae-7G SOD123 SLM561A25ae-7G SOD123 SLM561A30ae-7G SOD123 SLM561A35ae-7G SOD123 SLM561A40ae-7G SOD123 SLM561A45ae-7G SOD123 SLM561A50ae-7G SOD123 S…

golang操作mysql基础驱动github.com/go-sql-driver/mysql使用

golang中类似java操作mysql的jdbc一样&#xff0c;github.com/go-sql-driver/mysql也为go提供了基础接口&#xff0c;在开发中往往需要写更多的代码来满足自己的定制需求&#xff0c;java在驱动基础上有了扩展&#xff0c;orm框架诞生&#xff0c;mybatis、jpa等都是好用的扩展…

RabbitMQ1:初识MQ

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

父组件提交时让各自的子组件验证表格是否填写完整

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 父组件中有三个表格&#xff0c;表格中时输入框&#xff0c;有些输入框是必填的&#xff0c;在父组件提交时需要验证这三个表格的必填输入框中是否有没填写的。 原因分析&#xff1a; 提示&#xff1a…

Siglus引擎 Unpack | 未完待续

前言 未完待续。 代码在这里&#xff1a;https://github.com/N0zoM1z0/SiglusEngine-Extract 以后随时会更新。&#xff08;&#xff09; 因为我是选择直接逆向游戏引擎&#xff0c;在无源码&#xff0c;不hook的情况下硬逆Siglus…… 路漫漫。。。 read.sav 可以直接逆Sigl…

黑马嵌入式开发入门模电基础学习笔记

学习视频: 黑马程序员嵌入式开发入门模电&#xff08;模拟电路&#xff09;基础 文章目录 背景介绍电流电压组件仿真三极管ne555PCBEDA案例&#xff1a;非接触式电笔案例&#xff1a;电子琴 背景介绍 电流 电压 组件 仿真 三极管 mos管 ne555 PCB EDA 案例&#xff1a;非接触…

centos7安装Chrome使用selenium-wire

背景&#xff1a;在centos7中运行selenium-wire爬虫&#xff0c;系统自带的Firefox浏览器不兼容&#xff0c;运行报错no attribute ‘set_preference’&#xff0c;应该是selenium-wire和Firefox的驱动不兼容 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上…

C++设计模式:抽象工厂模式(风格切换案例)

抽象工厂模式&#xff08;Abstract Factory&#xff09;是一种创建型设计模式&#xff0c;其核心思想是&#xff1a;为一组相关或相互依赖的对象提供一个创建接口&#xff0c;而无需指定它们具体的类。简单来说&#xff0c;就是一个工厂可以生产一系列相关的对象。 我们接下来…

Oracle数据库安全扫描1158/3938端口出现弱SSL加密算法解决方法之一

问题复述 某国企项目现场反应安全扫描出部署某历史项目的Windows服务器上的1158及3938两个端口出现了弱SSL加密算法漏洞&#xff0c;要求整改。 经过核实&#xff0c;该Windows服务器上部署了tomcat与Oracle 11g数据库&#xff0c;其中1158和3938两个端口均为Oracle数据库所使…

linux 中mysql查看慢日志

1、到mysql容器&#xff0c;先登录到数据库&#xff0c;查看是否开启 mysql -h 127.0.0.1 -uroot -p SHOW VARIABLES LIKE slow_query_log; 2、如果没有开启&#xff0c;需要先开启 set global slow_query_log ON; 3、查看慢日志文件 SHOW VARIABLES LIKE slow_query_log…

从0开始机器学习--Day30--异常检测算法

异常检测算法(Anomaly detection algorithm) 我们定义异常检测算法的输出&#xff0c;也写作&#xff0c;这里的每一项括号内代表的是每个特征都符合各自的高斯分布&#xff08;也就是正态分布&#xff09;&#xff0c;代表均值&#xff0c;决定了模型的中心位置&#xff1b;代…

[数组二分查找] 0209. 长度最小的子数组

文章目录 1. 题目链接2. 题目大意3. 示例4. 解题思路5. 参考代码 1. 题目链接 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 2. 题目大意 描述&#xff1a;给定一个只包含正整数的数组 nums 和一个正整数 target。 要求&#xff1a;找出数组中满足和大于等…

架构图解析:如何构建高效的微服务系统

在当今的数字化浪潮中&#xff0c;构建高效、灵活且可扩展的系统已成为企业的重要目标。微服务架构作为一种先进的软件设计模式&#xff0c;通过将复杂的应用程序分解为一系列小型、独立的服务&#xff0c;显著提升了系统的灵活性、可扩展性和维护性。本文将通过解析微服务系统…

排序排序的概念及其运用和选择排序

排序排序的概念及其运用和选择排序 7. 排序7.1 排序的概念及其运用7.2 选择排序算法——直接选择排序选择排序基本思想&#xff1a;直接选择排序选择排序原理参考程序 如何交换数据直接选择排序的特性总结&#xff1a; 7. 排序 7.1 排序的概念及其运用 排序&#xff1a;所谓排…

centos和ubuntu有什么区别?

CentOS与Ubuntu的区别在于以下几个方面&#xff1a;1、源码基础不同&#xff1b;2、设计理念不同&#xff1b;3、使用场景不同&#xff1b;4、软件包管理不同&#xff1b;整体上看&#xff0c;CentOS更倾向于企业级服务器应用&#xff0c;稳定性较强&#xff1b;而Ubuntu更注重…

Websocket如何分块处理数据量超大的消息体

若我们服务端一次性最大处理的字节数是1M,而客户端发来了2M的数据&#xff0c;此时服务端的数据就要被切割成两次传输解码。Http协议中有分块传输&#xff0c;而在Websocket也可以分块处理超大的消息体。在jsr356标准中使用javax.websocket.MessageHandler.Partial可以分块处理…

ELMo模型介绍:深度理解语言模型的嵌入艺术

ELMo模型介绍&#xff1a;深度理解语言模型的嵌入艺术 引言 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;词嵌入&#xff08;word embedding&#xff09;是将词汇或短语从词汇表映射到向量的数学表示&#xff0c;这些向量能够捕捉词汇之间的语义和语法关系。E…

【澜舟科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…