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

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐