目录
数据库的一些重要概念
SQLite 中有几个重要的概念,它们对于理解和有效使用 SQLite 数据库至关重要:
1、数据库 (Database):
数据库是一个文件,其中包含一个或多个相关表的集合。在 SQLite 中,一个数据库通常对应一个文件,并且所有的表格和数据都存储在这个文件中。
2、表格 (Table):
表格是数据库中的基本组成单位,用于存储数据。每个表格包含零行或多行数据,并且每一行都被组织成一个或多个列。每个列都有一个数据类型,用于指定它可以存储的数据的类型。
3、列 (Column):
表格中的列定义了表格中存储的数据的类型和格式。每个列都有一个名称和一个数据类型,例如整数、文本、实数等。
4、行 (Row):
表格中的每一行都包含了一组数据,这些数据按照表格的列的顺序排列。每一行都被称为一个记录或条目,每个记录包含了一组相关的数据。
5、主键 (Primary Key):
主键是表格中的一列,其值在整个表格中唯一标识每一行数据。主键的值不能重复,并且可以用于快速查找、索引和更新数据。
6、索引 (Index):
索引是一种数据结构,用于快速查找表格中的数据。通过创建索引,可以提高数据库查询的性能,特别是在大型表格中搜索特定数据时。
7、SQL (Structured Query Language):
SQL 是一种用于管理和操作关系型数据库的标准化语言。通过使用 SQL,可以执行各种操作,包括创建表格、插入和更新数据、查询数据以及删除数据等。
8、预处理语句 (Prepared Statement):
预处理语句是一种执行 SQL 查询和命令的方法,它将 SQL 语句预先编译成一个准备好的语句,然后可以多次执行这个语句,只需不断地提供不同的参数值。
lxy:如果不使用预处理语句,在批量执行时,sql语句要编译一次执行一次,使用了预处理语句可以一次编译多次执行,提高了效率。
9、事务 (Transaction):
事务是一组数据库操作,这些操作被视为一个不可分割的单元,要么全部执行成功,要么全部失败回滚。
事务用于确保数据库的一致性和完整性,并提供了一种机制来管理并发访问数据库时的数据一致性。
在默认情况下,SQLite 在每个 SQL 语句完成后都会自动提交事务。这意味着每个 SQL 语句都是一个单独的事务,即使不显式使用 BEGIN TRANSACTION 和 COMMIT TRANSACTION 也是如此。这种模式称为自动提交模式。
我们可以使用手动模式,来将一组数据库操作,放在一个事务中,来提高执行效率。
通过将事务和预处理语句结合起来使用,我们可以提高数据库操作的效率和安全性。预处理语句减少了解析和编译 SQL 语句的开销,而事务则确保了一组操作的一致性和完整性。
鸿蒙数据库
RdbStore:
提供管理关系数据库(RDB)方法的接口。
try {
let ctt:Context = GlobalContext.getContext().getValue(GlobalContext.KEY_CTX) as Context;
dataRdb.getRdbStore(ctt, {
name: 'dbName',
securityLevel: dataRdb.SecurityLevel.S1,
encrypt: false,
}, (err, rdbStore) => {
if (err) {
console.error('lxy:err==' + err)
} else {
// rdbStore提供管理关系数据库(RDB)方法的接口。
rdbStore.querySql(`SELECT * FROM depts_users WHERE parentId="${id}" LIMIT 1`,
(err, resultSet) => {
while (resultSet.goToNextRow()) {
result = DFAddressBookModelHandler.transitionModel(resultSet)
}
// 释放数据集的内存
resultSet.close();
if(callBack){callBack(result)};
})
}
})
} catch(error){
}
rdbStore.querySql():执行sql语句后有返回结果时使用,比如查询
rdbStore.executeSql():执行sql语句后没有返回结果时使用,比如建表,删除等
RdbPredicates:
数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。
ResultSet:
提供用户调用关系型数据库查询接口之后返回的结果集合。
let sqlStr = 'select count(*)from search_history_address_book'
rdbStore.querySql(sqlStr,(error, resultSet) =>{
if (resultSet.goToNextRow()) {
// resultSet 是一个包含了多行和多列的结果集合,
// 行通过goToNextRow一行一行的读
// 列可以通过索引号和列的名称来读
// 这个sqlStr执行后只会产生一个一行一列的结果集,所以通过下面的方法获取结果集第一列的值,就是最终需要的结果
// getLong(columnIndex: number): number;
let count = resultSet.getLong(0);
}
})
行者常至,为者常成!