ArkTS基于SQLite数据库的增删改查

一、SQLite数据库

        SQLite 是一款轻量级、嵌入式、无服务器的关系型数据库管理系统。

二、SQLite数据库的特点

        1.轻量级与无服务器架构。整个数据库仅由一个文件构成(通常为.db.sqlite格式),无需独立的数据库服务器进程;库文件体积小(约 500KB-1MB),可直接嵌入应用程序中运行。

        2.跨平台兼容性好。支持多中操作系统。

        3.高性能与低资源消耗。

        4.事务安全性。支持完整的 ACID(原子性、一致性、隔离性、持久性)事务。事务可确保数据操作要么完全成功,要么完全回滚,避免数据不一致。

        5.动态类型系统。字段不强制绑定数据类型,值的类型由内容决定。支持 NULL、INTEGER、REAL(浮点数)、TEXT、BLOB(二进制数据)五种基本数据类型。

三、ArkTS基于SQLite数据库的增删改查

        1.构建学生类
class Student {
  id: number = 0
  username: string
  age: number = 0

  constructor(id: number, username: string, age: number) {
    this.id = id
    this.username = username
    this.age = age
  }
}

export default Student
        2.设计工具类:操作数据库
import { relationalStore } from "@kit.ArkData"
import Student from "../model/Stu"
import { BusinessError } from "@kit.BasicServicesKit"

//工具类
class RdbUtils {
  //数据库的操作对象
  private static rdbStore: relationalStore.RdbStore

  static setStore(store: relationalStore.RdbStore) {
    RdbUtils.rdbStore = store
  }

  static getStore(): relationalStore.RdbStore {
    return RdbUtils.rdbStore
  }

  static executeSql(sql: string): Promise<void> {

    return RdbUtils.getStore().executeSql(sql)
  }

  //======查询数据======//
  static queryAll(): Promise<Array<Student>> {
    let prodicates = new relationalStore.RdbPredicates("STUDENT")

    return new Promise<Array<Student>>((resolve, reject) => {
      RdbUtils.getStore().query(prodicates).then((result) => {

        let arrays = new Array<Student>()
        while (result.goToNextRow()) {
          let stu = new Student(result.getLong(0), result.getString(1), result.getLong(2))
          arrays.push(stu)
        }
        resolve(arrays)
      }).catch((error: BusinessError) => {
      })
    })
  }

  //======插入数据======//
  static insert(tableName: string, data: relationalStore.ValuesBucket): Promise<number> {

    return RdbUtils.getStore().insert(tableName, data)

  }

  //======修改数据======//
  static updateInfo(id: number, data: relationalStore.ValuesBucket): Promise<number> {
    let prodicates = new relationalStore.RdbPredicates("STUDENT")
    prodicates.equalTo("ID", id)

    return RdbUtils.getStore().update(data, prodicates)

  }

  //======删除数据======//
  static deleteInfo(id: number): Promise<number> {
    let prodicates = new relationalStore.RdbPredicates("STUDENT")
    prodicates.equalTo("ID", id)
    return RdbUtils.getStore().delete(prodicates)

  }
}

export default RdbUtils
        3.创建数据库:在EntryAbility文件中

    //创建数据库
    const STORE_CONFIG: relationalStore.StoreConfig= {
      name: 'RdbTest.db',
      securityLevel: relationalStore.SecurityLevel.S3,
      encrypt: false,
      customDir: 'customDir/subCustomDir',
      isReadOnly: false
    };
    relationalStore.getRdbStore(this.context,STORE_CONFIG,(error,store)=>{
      if(error)
      {
        console.log("创建数据库失败")
        return
      }
      console.log("创建数据库成功")

      RdbUtils.setStore(store)
    })
        4.构建首页页面:添加按钮,分别实现功能:数据库的创建,查询数据,添加新数据、修改数据、删除数据,并跳转至对应的页面
import RdbUtils from "../utils/Rdbutils"
import { BusinessError } from "@kit.BasicServicesKit"
import { promptAction, router } from "@kit.ArkUI"


@Entry
@Component
struct Chapter5 {
  @State nameText: string = ''
  @State ageText: string = ''

  build() {
    Column({ space: 20 }) {

      Text("sqltie数据库操作").fontSize(40).fontColor(0x87CEFA).margin({ bottom: 80 })

      //===========创建数据库表=============//
      Button("创建数据库表").fontSize(30).width("80%").onClick((event: ClickEvent) => {
        const sql =
          "CREATE  TABLE  IF NOT  EXISTS  STUDENT (ID  INTEGER PRIMARY KEY AUTOINCREMENT,USERNAME TEXT NOT NULL,AGE INTEGER)"
        RdbUtils.executeSql(sql).then(() => {
          promptAction.showToast({
            message: "创建数据库成功"
          })
        }).catch((err: BusinessError) => {
          promptAction.showToast({
            message: "创建数据库失败"
          })
        })
      })
      //============查询数据=============//
      Button("查询数据").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          //触发点击事件,跳转页面至Chapter7
          router.pushUrl({
            url: "pages/Chapter7"
          })
        })
      //=========插入数据==========//
      Button("添加新数据").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          router.pushUrl({
            url: "pages/Chapter6"
          })
        })
      //======修改数据========//
      Button("修改数据").fontSize(30).width("80%")
        .onClick(() => {
          //跳转页面至Chapter8
          router.pushUrl({
            url: "pages/Chapter8"
          })
        })
      //=======删除数据========//
      Button("删除数据").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          router.pushUrl({
            url: "pages/Chapter7"
          })
        })
    }.width("100%").height("100%").justifyContent(FlexAlign.Center)
  }
}
         5.构建功能页1:实现功能:查询数据库和删除数据功能
import Student from '../model/Stu';
import RdbUtils from '../utils/Rdbutils';
import { promptAction, router } from '@kit.ArkUI';

@Entry
@Component
struct Chapter7 {
  @State sqltie: string = '';
  @State idText: number = 0

  build() {
    Column({ space: 20 }) {
      Text("数据库信息").fontSize(40).fontColor(0x00BFFF).margin({ top: 20 })
      Button("点击查询数据").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          RdbUtils.queryAll().then((stus: Array<Student>) => {
            let stuInfo = JSON.stringify(stus)
            promptAction.showToast({
              message: "查询数据成功" + stuInfo
            })
            this.sqltie = stuInfo

          }).catch(() => {
            promptAction.showToast({
              message: "查询数据失败,请稍后重试"
            })
          })
        })

      //删除功能
      TextInput({ placeholder: "请输入您想删除数据的ID" }).width("80%").height("6%")
        .placeholderColor(Color.Red)
        .onChange((value: string) => {
          this.idText = Number(value)
        })
      Button("点击删除").fontSize(30).width("80%").onClick((event: ClickEvent) => {
        RdbUtils.deleteInfo(this.idText).then((result) => {
          promptAction.showToast({
            message: "删除数据,数据成功" + result
          })

        }).catch(() => {
          promptAction.showToast({
            message: "服务器繁忙,请稍后再试"
          })
        })
      })

      //显示数据信息
      Scroll() {
        Text(this.sqltie).fontSize(22).fontColor(0x7B68EE)
      }.width("100%").height("50%")

      //返回功能页按钮
      Button("返回功能页").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          router.pushUrl({
            url: "pages/Chapter5"
          })
        })
    }.width("100%").height("100%")
  }
}
        6.构建功能页2:添加新数据
import { relationalStore } from '@kit.ArkData';
import RdbUtils from '../utils/Rdbutils';
import { promptAction, router } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Chapter6 {
  @State message: string = '注册新用户';
  @State nameText: string = ''; //存储姓名
  @State ageText: string = ''; //存储年龄

  build() {
    Column({ space: 20 }) {

      Text(this.message).fontSize(40).fontColor(0x00BFFF)

      //文本输入框,请输入姓名
      TextInput({ placeholder: "请输入姓名" })
        .width("80%").height("8%")
        .onChange((value: string) => {
          this.nameText = value
        })

      //文本输入框,请输入年龄
      TextInput({ placeholder: "请输入年龄" })
        .width("80%").height("8%")
        .onChange((value: string) => {
          this.ageText = value
        })

      //创建按钮,绑定点击事件
      Button("添加到数据库").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          console.log(this.nameText, this.ageText)
          const valueBucket: relationalStore.ValuesBucket = {
            "USERNAME": this.nameText,
            "AGE": this.ageText
          }
          RdbUtils.insert("STUDENT", valueBucket).then((count) => {

            promptAction.showToast({
              message: "插入数据成功" + count
            })

          }).catch((error: BusinessError) => {

            promptAction.showToast({
              message: "创建数据失败"
            })
          })
        })

      //返回Chapter5页面
      Button("返回功能页").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          router.pushUrl({
            url: "pages/Chapter5"
          })
        })
    }.width("100%").height("100%")
  }
}
        7.构建功能页3:实现修改数据功能
import { promptAction, router } from '@kit.ArkUI';
import { relationalStore } from '@kit.ArkData';
import RdbUtils from '../utils/Rdbutils';

@Entry
@Component
struct Chapter8 {
  @State nameText: string = ""
  @State ageText: string = ""
  @State idText: number = 0

  build() {
    Column({ space: 20 }) {
      Text("修改信息").fontSize(40).fontColor(0x00BFFF).margin({ top: 20 })
      //返回查询页Chapter7
      Button("点击查询数据").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          router.pushUrl({
            url: "pages/Chapter7"
          })
        })
      //======修改数据=========//
      //文本输入框,请输入ID
      TextInput({ placeholder: "请输入您想修改数据的ID" }).width("80%").height("6%")
        .placeholderColor(Color.Green)
        .onChange((value: string) => {
          this.idText = Number(value)
        })
      //文本输入框,请输入姓名
      TextInput({ placeholder: "请输入姓名" })
        .width("80%").height("6%")
        .placeholderColor(Color.Green)
        .onChange((value: string) => {
          this.nameText = value
        })

      //文本输入框,请输入年龄
      TextInput({ placeholder: "请输入年龄" })
        .width("80%").height("6%")
        .placeholderColor(Color.Green)
        .onChange((value: string) => {
          this.ageText = value
        })
      Button("点击修改数据").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          const valueBucket: relationalStore.ValuesBucket = {
            "USERNAME": this.nameText,
            "AGE": this.ageText
          }
          RdbUtils.updateInfo(this.idText, valueBucket).then((result) => {

            promptAction.showToast({
              message: "更新数据,数据成功" + result
            })

          }).catch(() => {
          })
        })
      //返回功能页按钮
      Button("返回功能页").fontSize(30).width("80%")
        .onClick((event: ClickEvent) => {
          router.pushUrl({
            url: "pages/Chapter5"
          })
        })
    }.width("100%").height("100%")
  }
}
        数据库文件的存放位置:

        打开模拟器,运行效果:

                 

                

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值