嵌入式数据库概念和基本命令的使用
@TOC
前言
本篇文章将为大家讲解嵌入式数据库的使用,嵌入式数据的话主要是使用sqlite数据库。
一、sqlite数据库概念
SQLite 是一种轻量级的嵌入式关系型数据库管理系统(RDBMS),它被广泛应用于各种应用程序中,从移动应用到桌面应用再到 Web 应用。以下是关于 SQLite 数据库的一些概念解释:
-
嵌入式数据库管理系统(Embedded Database Management System):SQLite 是一种嵌入式数据库,这意味着它不需要独立的服务器进程来管理数据库。相反,SQLite 数据库引擎被直接集成到应用程序中,数据库以文件的形式存储在主机文件系统中。
-
关系型数据库管理系统(RDBMS):SQLite 是关系型数据库管理系统的一种,这意味着它使用表、行和列来组织和存储数据。它支持 SQL(Structured Query Language)作为与数据库交互的标准语言。
-
轻量级(Lightweight):SQLite 设计用于在资源有限的环境下运行,并且具有小巧、快速和高效的特点。它的库文件大小相对较小,且资源消耗较低,适用于嵌入式系统和移动设备等场景。
-
零配置(Zero Configuration):使用 SQLite 时,不需要进行复杂的配置或管理。只需包含 SQLite 库并在应用程序中指定数据库文件的路径,即可开始使用。
-
单用户访问(Single-User Access):SQLite 不支持多用户同时访问同一数据库文件。只有一个用户(即应用程序)可以连接到数据库并对其进行读写操作。这在某些情况下可能是限制,但也确保了数据的完整性和一致性。
-
跨平台性(Cross-Platform):SQLite 可以在多种操作系统上运行,包括 Windows、macOS、Linux 等,因此它是一个跨平台的解决方案。
-
事务支持(Transaction Support):SQLite 支持事务,允许将一系列数据库操作组合成一个逻辑单元,要么全部成功执行,要么全部失败回滚。这有助于确保数据的一致性和完整性。
-
自包含性(Self-Contained):SQLite 数据库被存储在单个文件中,并且所有的数据库操作都在该文件内执行。这种自包含性使得 SQLite 数据库易于传输、备份和维护。
总的来说,SQLite 是一种简单、快速、易于使用的数据库解决方案,特别适用于对数据库性能要求不高、规模较小的应用程序。
二、sqlite数据库命令分类和使用
1.命令分类
当谈到 SQLite 数据库命令时,可以将其分为两类:系统命令和 SQLite 特定的命令。
1. 系统命令:
系统命令是在命令行界面或终端中执行的命令,用于管理 SQLite 数据库和与操作系统交互。这些命令通常不是 SQLite 引擎的一部分,而是与 SQLite 交互的外部工具或系统级命令。
一些常见的系统命令包括:
- sqlite3命令:用于启动 SQLite 数据库的命令行 shell,使用户能够与 SQLite 数据库进行交互。
- 操作系统命令:例如在 Unix/Linux 系统中的 ls、cd 等命令,或在 Windows 中的 dir、cd 等命令,用于管理文件和目录。
2. SQLite 命令:
SQLite 命令是在 SQLite 数据库命令行 shell 中执行的命令,用于管理数据库、执行查询、事务控制等操作。这些命令是 SQLite 引擎的一部分,直接与 SQLite 数据库进行交互。
一些常见的 SQLite 命令包括:
- DDL 命令(数据定义语言):用于定义、修改和删除数据库对象,例如 CREATE TABLE、ALTER TABLE、DROP TABLE 等。
- DML 命令(数据操作语言):用于执行对数据库中的数据进行增、删、改的操作,例如 INSERT、UPDATE、DELETE。
- DQL 命令(数据查询语言):用于执行对数据库中的数据进行查询的操作,例如 SELECT。
- 事务控制命令:用于管理事务的开始、提交、回滚等,例如 BEGIN TRANSACTION、COMMIT、ROLLBACK。
这些 SQLite 命令是在 SQLite shell 中执行的,它们提供了一种直接与 SQLite 数据库进行交互的方式,并且可以通过脚本或编程语言中的 SQLite API 进行扩展和自动化。
2.系统命令的使用
1.查看帮助文档:
.help
2.显示当前输出模式:
.show
3.打开/关闭输出展示模式(可选为列模式或者显示模式):
.mode column -- 列模式
.mode line -- 行模式
.mode csv -- CSV 模式
4.退出 SQLite3:
.quit
3.sqlite命令的使用
1.创建数据库:
sqlite3 mydatabase.db
这个命令会创建一个名为mydatabase.db的SQLite数据库文件,并打开一个SQLite shell供你进行交互式操作。
2.创建表:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username TEXT,
email TEXT UNIQUE,
age INTEGER
);
这个命令会在数据库中创建一个名为users的表,包含id、username、email和age四个列。id列是主键,并且email列是唯一的。
3.插入数据:
INSERT INTO users (username, email, age) VALUES ('John', 'john@example.com', 30);
4.查询数据:
SELECT * FROM users;
这个命令会从users表中检索所有数据。
5.更新数据:
UPDATE users SET age = 31 WHERE username = 'John';
6.删除数据:
DELETE FROM users WHERE username = 'John';
7.退出SQLite shell:
.quit
三、sqlite C语言函数的使用和编程方法
SQLite提供了一组C语言API函数,使开发者可以在C程序中使用SQLite数据库。下面是一些常用的SQLite C语言函数以及它们的意思和用法:
-
sqlite3_open():
- 作用:用于打开一个SQLite数据库连接。
- 参数:
const char *filename
:数据库文件名。sqlite3 **ppDb
:指向sqlite3指针的指针,用于存储数据库连接对象。
- 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
-
sqlite3_close():
- 作用:关闭先前由sqlite3_open()函数打开的数据库连接。
- 参数:
sqlite3 *db
:数据库连接对象。
- 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
-
sqlite3_exec():
- 作用:执行SQL语句,并对每个执行的结果调用一个回调函数。
- 参数:
sqlite3 *db
:数据库连接对象。const char *sql
:要执行的SQL语句。int (*callback)(void*, int, char**, char**)
:回调函数,用于处理执行结果。void *data
:传递给回调函数的数据。char **errmsg
:指向错误信息的指针,若执行过程中发生错误,会将错误信息存储在这里。
- 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
-
sqlite3_prepare_v2():
- 作用:编译SQL语句,创建一个准备语句对象。
- 参数:
sqlite3 *db
:数据库连接对象。const char *sql
:要编译的SQL语句。int sql_len
:SQL语句的长度(如果为-1,则SQLite会自动计算)。sqlite3_stmt **stmt
:指向sqlite3_stmt指针的指针,用于存储准备语句对象。const char **pzTail
:指向剩余未处理的SQL语句的指针。
- 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
-
sqlite3_step():
- 作用:执行准备好的SQL语句的下一步操作。
- 参数:
sqlite3_stmt *stmt
:准备语句对象。
- 返回值:若操作成功,返回SQLITE_ROW(表示查询结果行)或SQLITE_DONE(表示执行完成);否则返回其他错误码。
-
sqlite3_bind_XXX():
- 作用:绑定参数到准备好的SQL语句中。
- 参数:
sqlite3_stmt *stmt
:准备语句对象。int idx
:参数索引,从1开始。XXX value
:要绑定的参数值,XXX代表不同数据类型,例如sqlite3_bind_int()、sqlite3_bind_text()等。
- 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
-
sqlite3_column_XXX():
- 作用:获取查询结果中指定列的值。
- 参数:
sqlite3_stmt *stmt
:准备语句对象。int idx
:列索引,从0开始。
- 返回值:列的值,XXX代表不同数据类型,例如sqlite3_column_int()、sqlite3_column_text()等。
-
sqlite3_finalize():
- 作用:释放准备语句对象所占用的资源。
- 参数:
sqlite3_stmt *stmt
:准备语句对象。
- 返回值:若操作成功,返回SQLITE_OK;否则返回其他错误码。
这些是SQLite C语言API中的一些常用函数,通过它们可以在C程序中实现对SQLite数据库的操作。
#include <stdio.h>
#include <sqlite3.h>
// 回调函数用于处理查询结果
int callback(void *data, int argc, char **argv, char **azColName){
int i;
printf("%s: ", (const char*)data);
for(i = 0; i < argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
int main(int argc, char* argv[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
// 打开数据库连接
rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return(0);
} else {
fprintf(stderr, "Opened database successfully\n");
}
// 创建表
const char *sql_create = "CREATE TABLE IF NOT EXISTS COMPANY(" \
"ID INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"ADDRESS CHAR(50)," \
"SALARY REAL );";
rc = sqlite3_exec(db, sql_create, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Table created successfully\n");
}
// 插入数据
const char *sql_insert = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
"VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";
rc = sqlite3_exec(db, sql_insert, callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Records created successfully\n");
}
// 查询数据
const char *sql_select = "SELECT * from COMPANY";
printf("Selecting records...\n");
rc = sqlite3_exec(db, sql_select, callback, (void*) "Select", &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
// 关闭数据库连接
sqlite3_close(db);
return 0;
}
这个示例程序完成了以下操作:
打开一个名为"test.db"的数据库连接。
创建一个名为"COMPANY"的表,包含ID、NAME、AGE、ADDRESS和SALARY字段。
插入一些记录到"COMPANY"表中。
查询"COMPANY"表中的所有记录,并打印输出。
关闭数据库连接。
你可以根据需要修改SQL语句以及数据处理部分来完成其他操作,比如更新数据、删除数据等。
总结
本篇文章主要讲解了数据库的概念和数据库的一些基本命令的使用,这篇文章就讲解到这里,下篇文章我们继续讲解。
- 点赞
- 收藏
- 关注作者
评论(0)