一、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%")
}
}
数据库文件的存放位置:

打开模拟器,运行效果:


9254

被折叠的 条评论
为什么被折叠?



