首页 > 其他分享 >鸿蒙开发-ArkTS 中实现关系数据管理功能

鸿蒙开发-ArkTS 中实现关系数据管理功能

时间:2024-12-04 16:57:04浏览次数:9  
标签:ArkTS 鸿蒙 executeSQL db course 数据管理 relation student id

在 ArkTS 中使用 SQLite 数据库来实现简单关系数据功能的具体代码示例,模拟了一个 “学生 - 课程” 的多对多关系场景,即一个学生可以选修多门课程,一门课程也可以被多个学生选修。

  1. 导入必要的模块
import { SQLiteDatabase } from '@arkts/sqlite';
  1. 初始化数据库
let db: SQLiteDatabase;

function initDatabase() {
    // 打开或创建数据库文件,这里假设数据库文件名为'relation_data.db'
    db = SQLiteDatabase.open('relation_data.db');
    createTables();
}

initDatabase();
  1. 创建表结构
function createTables() {
    // 创建学生表(students),包含学生ID(自增主键)和学生姓名
    db.executeSQL('CREATE TABLE IF NOT EXISTS students (student_id INTEGER PRIMARY KEY AUTOINCREMENT, student_name TEXT)');
    // 创建课程表(courses),包含课程ID(自增主键)和课程名称
    db.executeSQL('CREATE TABLE IF NOT EXISTS courses (course_id INTEGER PRIMARY KEY AUTOINCREMENT, course_name TEXT)');
    // 创建中间关联表(student_course_relation),用于建立学生和课程的多对多关系
    // 通过外键分别关联到students表的student_id和courses表的course_id
    db.executeSQL('CREATE TABLE IF NOT EXISTS student_course_relation (student_id INTEGER, course_id INTEGER, PRIMARY KEY (student_id, course_id), FOREIGN KEY (student_id) REFERENCES students(student_id), FOREIGN KEY (course_id) REFERENCES courses(course_id))');
}
  1. 插入数据操作

插入学生数据

function insertStudent(studentName: string) {
    db.executeSQL('INSERT INTO students (student_name) VALUES (?)', [studentName]);
}

// 示例插入几个学生
insertStudent('张三');
insertStudent('李四');
insertStudent('王五');

插入课程数据

function insertCourse(courseName: string) {
    db.executeSQL('INSERT INTO courses (course_name) VALUES (?)', [courseName]);
}

// 示例插入几门课程
insertCourse('数学');
insertCourse('英语');
insertCourse('物理');

建立学生和课程的关联关系(选修关系)

function enrollStudentToCourse(studentId: number, courseId: number) {
    db.executeSQL('INSERT INTO student_course_relation (student_id, course_id) VALUES (?,?)', [studentId, courseId]);
}

// 假设张三选修了数学和英语课程,李四选修了物理课程(这里需先获取对应的ID,为简化示例,假设ID依次递增分配)
enrollStudentToCourse(1, 1);
enrollStudentToCourse(1, 2);
enrollStudentToCourse(2, 3);
  1. 查询数据操作

查询某个学生选修的课程

function getCoursesByStudent(studentId: number) {
    let result = db.executeSQL('SELECT courses.course_name FROM courses JOIN student_course_relation ON courses.course_id = student_course_relation.course_id WHERE student_course_relation.student_id =?', [studentId]);
    let courses: string[] = [];
    for (let row of result.rows) {
        courses.push(row.course_name);
    }
    return courses;
}

// 查询张三选修的课程
let zhangsanCourses = getCoursesByStudent(1);
console.log('张三选修的课程:', zhangsanCourses);

查询某门课程被哪些学生选修

function getStudentsByCourse(courseId: number) {
    let result = db.executeSQL('SELECT students.student_name FROM students JOIN student_course_relation ON students.student_id = student_course_relation.student_id WHERE student_course_relation.course_id =?', [courseId]);
    let students: string[] = [];
    for (let row of result.rows) {
        students.push(row.student_name);
    }
    return students;
}

// 查询选修数学课程的学生
let mathStudents = getStudentsByCourse(1);
console.log('选修数学课程的学生:', mathStudents);
  1. 更新数据操作(例如修改学生姓名)
function updateStudentName(studentId: number, newName: string) {
    db.executeSQL('UPDATE students SET student_name =? WHERE student_id =?', [newName, studentId]);
}

// 将张三的姓名修改为张小三
updateStudentName(1, '张小三');
  1. 删除数据操作

删除某个学生及其选修的所有课程关联关系(先删除关联,再删除学生记录)

function deleteStudent(studentId: number) {
    // 先删除关联表中的相关记录
    db.executeSQL('DELETE FROM student_course_relation WHERE student_id =?', [studentId]);
    // 再删除学生表中的该学生记录
    db.executeSQL('DELETE FROM students WHERE student_id =?', [studentId]);
}

// 删除李四这个学生及其相关课程关联
deleteStudent(2);

删除某门课程及其被学生选修的所有关联关系(先删除关联,再删除课程记录)

function deleteCourse(courseId: number) {

// 先删除关联表中的相关记录

db.executeSQL('DELETE FROM student_course_relation WHERE course_id =?', [courseId]);

// 再删除课程表中的该课程记录

db.executeSQL('DELETE FROM courses WHERE course_id =?', [courseId]);

}

// 删除英语这门课程及其相关学生选修关联

deleteCourse(2);

在 ArkTS 中如何利用 SQLite 数据库来处理具有关联关系的数据,涵盖了创建表结构、插入、查询、更新以及删除等常见的数据操作,以体现关系数据功能的实现方式。你可以根据实际需求进一步扩展和完善代码逻辑。
在这里插入图片描述

标签:ArkTS,鸿蒙,executeSQL,db,course,数据管理,relation,student,id
From: https://blog.csdn.net/chuanshixx/article/details/144243923

相关文章

  • 【华为ICT大赛】ArkTS
    00.目录文章目录00.目录01.学习目标02.ArkTS语言基础类库概述03.并发3.1并发概述(掌握)3.2使用异步并发能力进行开发3.2.1异步并发概述3.2.2单次I/O任务开发指导3.3使用多线程并发能力进行开发3.3.1多线程并发概述3.3.2TaskPool和Worker的对比3.3.3CPU密集......
  • 中安证件OCR识别技术助力鸿蒙生态:智能化证件识别新体验
    在数字化和智能化的浪潮中,伴随国产化战略的深入推进,国产操作系统和软件生态的建设逐渐走向成熟。鸿蒙操作系统(HarmonyOSNext)作为华为推出的重要操作系统,凭借其开放、灵活和高效的特点,正在加速在多个领域的普及和应用。特别是在智能识别和人工智能技术的支持下,鸿蒙系统在各行各......
  • 手把手教你华为鸿蒙开发之第七节
    华为鸿蒙开发:数组和对象遍历及UI渲染详解引言在华为鸿蒙操作系统的开发中,数组和对象的遍历是基础且频繁的操作。无论是处理数据集合还是动态生成用户界面,都需要对数组和对象进行高效的遍历。本文将详细介绍如何在鸿蒙开发中使用for循环、for...of循环以及ForEach方法来遍......
  • 手把手教你华为鸿蒙开发之第九节
    华为鸿蒙开发:滚动视图Scroller与ForEach循环深度解析引言在移动应用开发中,滚动视图是展示大量内容的常用组件。华为鸿蒙操作系统提供了Scroller组件,允许开发者创建滚动视图。本文将通过DevEcoStudio详细介绍Scroller的基本使用、滚动控制以及如何结合ForEach循环动态生成滚......
  • 鸿蒙开发:如何上架一个元服务应用
    前言元服务,类似于微信的小程序,无需安装,即开即用,即用即走,它是基于鸿蒙系统,而非某个应用,也就是系统层的支持,可以说,这一点是非常的便捷,除此之外,元服务是支持独立上架、分发和运行的,能够独立实现业务闭环,可大幅度提升信息与服务的获取效率;特别是对于个人开发者,元服务,更加的包容,目......
  • 手把手教你华为鸿蒙开发之第八节
    华为鸿蒙开发:Swiper轮播组件详解与实践引言在现代用户界面设计中,轮播图是一种常见的组件,用于展示广告、新闻、产品等信息。华为鸿蒙操作系统提供了Swiper轮播组件,使得开发者能够轻松实现轮播效果。本文将通过DevEcoStudio详细介绍Swiper组件的基本使用、属性配置以及......
  • 在ArkTS中,如何优化布局以提高性能?
    大家好,我是V哥。在鸿蒙原生应用开发中,当一个复杂的界面加载数据或发生变化时,布局可能会发生调整,为了提高布局变化带来的性能问题,V哥在实际开发中,总结了一些优化技巧,来提高布局性能,笔记分享给大家。1.避免不必要的二次布局在Flex布局中,如果子组件的主轴尺寸总和不等于容器的......
  • 基于Java+SSM+JSP学生信息管理系统(源码+LW+调试文档+讲解等)/学生信息/管理系统/学生
    博主介绍......
  • 手把手教你华为鸿蒙开发之第六节
    华为鸿蒙开发:循环控制语句详解与示例引言在编程中,循环控制语句是处理重复任务的重要工具。在华为鸿蒙操作系统的开发中,我们可以使用while和for循环来实现代码的重复执行。本文将通过DevEcoStudio介绍鸿蒙开发中的循环控制语句,并提供丰富的示例来帮助理解。while循环w......
  • 纯血鸿蒙进程加速,混合app开发迎来又一波新机会
    时间不知不觉又来到了2024年最后一个月,又到了辞旧迎新,复盘今年,放眼明年的时候,开发行业也不例外。 纯血鸿蒙闭源操作酝酿和发酵了一年,终于在10月份发布了商用版本,迅速跟上的,还有11月份华为新产品全新操作系统的闪亮亮相登场。 纯血鸿蒙大潮流已无法阻挡。 鸿蒙......