外贸网站服务器我想学习做网站

张小明 2026/1/10 8:10:05
外贸网站服务器,我想学习做网站,网站开发 英文文章,设计建筑办公室Harmony学习之本地数据存储 一、场景引入 小明在上一篇文章中学会了网络请求#xff0c;现在他需要将用户登录信息、应用配置、商品收藏等数据持久化保存到本地#xff0c;这样即使应用重启或网络断开#xff0c;用户也能看到自己的个性化设置和历史数据。本篇文章将系统讲解…Harmony学习之本地数据存储一、场景引入小明在上一篇文章中学会了网络请求现在他需要将用户登录信息、应用配置、商品收藏等数据持久化保存到本地这样即使应用重启或网络断开用户也能看到自己的个性化设置和历史数据。本篇文章将系统讲解HarmonyOS的本地数据存储机制帮助小明实现数据的本地持久化。二、本地数据存储方案对比HarmonyOS提供了多种本地数据存储方式每种方式都有其适用场景存储方式适用场景特点Preferences用户配置、登录状态、开关设置轻量级键值对存储类似SharedPreferences关系型数据库结构化数据、复杂查询、事务支持基于SQLite支持ACID事务文件存储大文件、图片、文档支持二进制流和文本操作三、Preferences轻量级存储1. 核心概念Preferences是HarmonyOS提供的轻量级键值对存储方案适合存储用户配置、应用设置等小数据量信息。数据以Key-Value形式存储支持字符串、数字、布尔值等基本数据类型。2. 基本使用// src/main/ets/common/StorageUtil.ts import preferences from ohos.data.preferences; export class StorageUtil { private static instance: StorageUtil; private preferences: preferences.Preferences | null null; // 获取Preferences实例 public static async getInstance(): PromiseStorageUtil { if (!StorageUtil.instance) { StorageUtil.instance new StorageUtil(); await StorageUtil.instance.init(); } return StorageUtil.instance; } // 初始化Preferences private async init() { try { this.preferences await preferences.getPreferences( globalThis.getContext(), app_config ); } catch (error) { console.error(初始化Preferences失败:, error); } } // 保存数据 public async save(key: string, value: any): Promiseboolean { if (!this.preferences) return false; try { await this.preferences.put(key, value); await this.preferences.flush(); // 持久化到文件 return true; } catch (error) { console.error(保存数据失败:, error); return false; } } // 读取数据 public async getT(key: string, defaultValue: T): PromiseT { if (!this.preferences) return defaultValue; try { return await this.preferences.get(key, defaultValue); } catch (error) { console.error(读取数据失败:, error); return defaultValue; } } // 删除数据 public async delete(key: string): Promiseboolean { if (!this.preferences) return false; try { await this.preferences.delete(key); await this.preferences.flush(); return true; } catch (error) { console.error(删除数据失败:, error); return false; } } }3. 实战应用保存用户登录状态// src/main/ets/pages/Login.ets import { StorageUtil } from ../common/StorageUtil; Entry Component struct Login { State username: string ; State password: string ; build() { Column({ space: 20 }) { // ... 登录表单UI代码 Button(登录) .onClick(() { this.handleLogin(); }) } } // 处理登录 private async handleLogin() { // 验证用户名密码... // 保存登录状态 const storage await StorageUtil.getInstance(); await storage.save(isLoggedIn, true); await storage.save(username, this.username); // 跳转到首页 router.replaceUrl({ url: pages/Home }); } }四、关系型数据库存储1. 核心概念关系型数据库基于SQLite组件提供结构化数据存储能力支持复杂的查询、事务、索引等功能。适合存储用户信息、商品数据、订单记录等结构化数据。2. 数据库创建与表定义// src/main/ets/database/DatabaseHelper.ts import relationalStore from ohos.data.relationalStore; // 用户表定义 export interface User { id?: number; name: string; email: string; age: number; createTime: number; } export class DatabaseHelper { private static instance: DatabaseHelper; private rdbStore: relationalStore.RdbStore | null null; // 数据库配置 private readonly DB_NAME app_database.db; private readonly DB_VERSION 1; // 创建用户表SQL private readonly CREATE_USER_TABLE CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE NOT NULL, age INTEGER, createTime INTEGER DEFAULT (strftime(%s, now)) ) ; // 获取单例实例 public static async getInstance(): PromiseDatabaseHelper { if (!DatabaseHelper.instance) { DatabaseHelper.instance new DatabaseHelper(); await DatabaseHelper.instance.init(); } return DatabaseHelper.instance; } // 初始化数据库 private async init() { try { const context globalThis.getContext(); const storeConfig: relationalStore.StoreConfig { name: this.DB_NAME, securityLevel: relationalStore.SecurityLevel.S1 }; this.rdbStore await relationalStore.getRdbStore(context, storeConfig); // 创建表 await this.rdbStore.executeSql(this.CREATE_USER_TABLE); console.log(数据库初始化成功); } catch (error) { console.error(数据库初始化失败:, error); } } }3. 增删改查操作// 在DatabaseHelper类中继续添加方法 // 插入用户 public async insertUser(user: User): Promisenumber { if (!this.rdbStore) return -1; try { const valueBucket: relationalStore.ValuesBucket { name: user.name, email: user.email, age: user.age }; const rowId await this.rdbStore.insert(users, valueBucket); return rowId; } catch (error) { console.error(插入用户失败:, error); return -1; } } // 查询用户 public async queryUsers(): PromiseUser[] { if (!this.rdbStore) return []; try { const predicates new relationalStore.RdbPredicates(users); const columns [id, name, email, age, createTime]; const resultSet await this.rdbStore.query(predicates, columns); const users: User[] []; while (resultSet.goToNextRow()) { users.push({ id: resultSet.getLong(resultSet.getColumnIndex(id)), name: resultSet.getString(resultSet.getColumnIndex(name)), email: resultSet.getString(resultSet.getColumnIndex(email)), age: resultSet.getLong(resultSet.getColumnIndex(age)), createTime: resultSet.getLong(resultSet.getColumnIndex(createTime)) }); } resultSet.close(); return users; } catch (error) { console.error(查询用户失败:, error); return []; } } // 更新用户 public async updateUser(user: User): Promiseboolean { if (!this.rdbStore || !user.id) return false; try { const predicates new relationalStore.RdbPredicates(users); predicates.equalTo(id, user.id); const valueBucket: relationalStore.ValuesBucket { name: user.name, email: user.email, age: user.age }; const affectedRows await this.rdbStore.update(valueBucket, predicates); return affectedRows 0; } catch (error) { console.error(更新用户失败:, error); return false; } } // 删除用户 public async deleteUser(id: number): Promiseboolean { if (!this.rdbStore) return false; try { const predicates new relationalStore.RdbPredicates(users); predicates.equalTo(id, id); const affectedRows await this.rdbStore.delete(predicates); return affectedRows 0; } catch (error) { console.error(删除用户失败:, error); return false; } }4. 实战应用用户管理// src/main/ets/pages/UserList.ets import { DatabaseHelper, User } from ../database/DatabaseHelper; Entry Component struct UserList { State users: User[] []; aboutToAppear() { this.loadUsers(); } build() { Column() { List() { ForEach(this.users, (user: User) { ListItem() { Column() { Text(user.name) .fontSize(18) Text(user.email) .fontSize(14) .fontColor(Color.Gray) } .padding(10) } }) } .layoutWeight(1) } } // 加载用户列表 private async loadUsers() { const dbHelper await DatabaseHelper.getInstance(); this.users await dbHelper.queryUsers(); } }五、文件存储1. 核心概念文件存储适用于保存图片、文档、大体积数据等二进制内容。HarmonyOS提供了文件系统API支持文件的创建、读写、删除等操作。2. 文件操作示例// src/main/ets/common/FileUtil.ts import fs from ohos.file.fs; export class FileUtil { // 写入文件 public static async writeFile(filePath: string, content: string): Promiseboolean { try { const file await fs.open(filePath, fs.OpenMode.CREATE | fs.OpenMode.WRITE); await fs.write(file.fd, content); await fs.close(file.fd); return true; } catch (error) { console.error(写入文件失败:, error); return false; } } // 读取文件 public static async readFile(filePath: string): Promisestring { try { const file await fs.open(filePath, fs.OpenMode.READ_ONLY); const stat await fs.stat(filePath); const buffer new ArrayBuffer(stat.size); await fs.read(file.fd, buffer); await fs.close(file.fd); const textDecoder new util.TextDecoder(); return textDecoder.decode(buffer); } catch (error) { console.error(读取文件失败:, error); return ; } } // 获取应用私有目录 public static getFilesDir(): string { const context globalThis.getContext(); return context.filesDir; } }六、最佳实践1. 数据存储选型指南Preferences适用场景用户配置信息主题、语言、字体大小登录状态、Token等敏感信息简单的开关设置关系型数据库适用场景用户信息、商品列表等结构化数据需要复杂查询、排序、分页的场景需要事务支持的业务数据文件存储适用场景图片、视频、文档等大文件日志文件、缓存数据需要导出/导入的数据2. 性能优化建议Preferences优化批量操作时先put再flush减少IO次数避免存储大JSON对象建议使用数据库及时清理不再使用的数据数据库优化为常用查询字段创建索引使用事务处理批量操作避免在主线程执行耗时查询文件存储优化大文件使用流式读写定期清理缓存文件使用临时目录存储临时文件3. 错误处理与调试// 完整的错误处理示例 try { const dbHelper await DatabaseHelper.getInstance(); const users await dbHelper.queryUsers(); // 处理数据... } catch (error) { console.error(数据库操作失败:, error); promptAction.showToast({ message: 数据加载失败请稍后重试, duration: 2000 }); }七、总结与行动建议核心要点回顾Preferences轻量级键值对存储适合配置信息关系型数据库结构化数据存储支持复杂查询文件存储大文件、二进制数据存储选型原则根据数据特点和业务需求选择合适的存储方案行动建议动手实践创建用户配置页面使用Preferences保存主题设置数据库实战实现一个简单的待办事项应用使用数据库存储任务数据文件操作实现图片缓存功能将网络图片保存到本地性能优化为数据库查询添加索引优化查询性能通过本篇文章的学习你已经掌握了HarmonyOS本地数据存储的核心能力。下一篇文章将深入讲解列表渲染与性能优化帮助你实现高效的数据展示和交互体验。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

外贸做网站昆明网站建设服务

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

张小明 2026/1/5 2:56:44 网站建设

英文网站建设 深圳广告设计有哪些内容

教务管理 目录 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 一、前言 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主&am…

张小明 2026/1/5 2:57:47 网站建设

网站建设培训 店南京疾控最新通告今天

系统性能分析与优化指南 1. 性能计数器相关分析与设置 1.1 性能计数器指标分析 通过性能计数器可以了解系统的运行状况,以下是几个关键的性能计数器及其分析方法: | 性能计数器 | 分析方法 | | — | — | | 页面文件使用率 | 如果页面文件使用率超过 95% 或者使用峰值接…

张小明 2026/1/5 2:58:52 网站建设

东莞网站推广的公司房地产新闻最新政策

3步搞定EPUB转Markdown:电子书内容提取的终极方案 【免费下载链接】markitdown 将文件和办公文档转换为 Markdown 的 Python 工具 项目地址: https://gitcode.com/GitHub_Trending/ma/markitdown 还在为电子书内容无法复制而烦恼?想要将EPUB电子书…

张小明 2026/1/5 2:59:56 网站建设

网站空间流量是什么托管服务器是什么意思

DDColor黑白老照片智能修复:基于ComfyUI的高效图像上色工作流详解 在泛黄的相纸与模糊影像背后,是几代人的记忆。一张上世纪的老照片,可能记录着祖辈婚礼、童年街巷或城市旧貌——然而岁月不仅带走了清晰度,也抹去了颜色。如今&a…

张小明 2026/1/5 3:00:58 网站建设

如何给网站文字做超链接wordpress本地配置

TikTok的全球兴趣电商生态,为跨境卖家提供了前所未有的增长机遇,然而,其成功逻辑与传统电商截然不同,要求卖家构建一套从战略定位到规模化复制的完整运营闭环,这不再是简单的商品上架,而是一场关于系统化能…

张小明 2026/1/5 3:02:02 网站建设