赞
踩
sqlite3官网中下载对应zip,其中tools无论版本是多少,都需要下载。下载之后将两个文件中的内容都解压到同一个文件夹中,将文件夹的地址添加到系统变量中。此电脑
—>属性
—>高级系统设置
—>环境变量
—>系统变量
,选择PATH
环境变量进行编辑,将上述路径添加进去即可。然后后台运行命令sqlite3。下图为安装成功反应。
- sqlite3 datebase_name
- //sqlite3 lht1.db
- //这将打开名为 lht1.db 的 SQLite 数据库文件,并进入 SQLite 的交互式 shell 界面,您可以在其中执行 //SQL 查询和命令。
-
- .open datebase_name
- //若已经使用sqlite3进入交互shell界面,则使用.open
使用 SQLite .dump 点命令来导出完整的数据库在一个文本文件中
sqlite3 testDB.db .dump > testDB.sql
上面的命令将转换整个 testDB.db 数据库的内容到 SQLite 的语句中,并将其转储到 ASCII 文本文件 testDB.sql 中。您可以通过简单的方式从生成的 testDB.sql 恢复
$sqlite3 testDB.db < testDB.sql
- CREATE TABLE database_name.table_name(
- column1 datatype PRIMARY KEY,
- column2 datatype,
- column3 datatype,
- .....
- columnN datatype,
- );
主键(PRIMARY KEY),这意味着它必须是唯一的。当你尝试向表中插入一个具有与现有行相同
floors
值的新行时,就会触发唯一性约束。
.tables 命令来验证表是否已成功创建,该命令用于列出附加数据库中的所有表。
.schema table_name 命令得到表的完整信息。
- DROP TABLE table_name;
- //删除需谨慎再谨慎
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)] VALUES (value1, value2, value3,...valueN);
如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
使用一个表来填充另外一个表
- INSERT INTO first_table_name [(column1, column2, ... columnN)]
- SELECT column1, column2, ...columnN
- FROM second_table_name
- [WHERE condition];
SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
SELECT column1, column2, columnN FROM table_name;
如果全部获取则使用*
SELECT * FROM table_name;
UPDATE 查询用于修改表中已有的记录。可以使用带有 WHERE 子句的 UPDATE 查询来更新选定行,否则所有的行都会被更新。
- UPDATE table_name
- SET column1 = value1, column2 = value2...., columnN = valueN
- WHERE [condition];
DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都会被删除。
- DELETE FROM table_name
- WHERE [condition];
将sqlite3官网下载的源文件解压后放在项目中,然后将原来下载的sqlite3.dll也添加到项目中。然后使用以下指令编译。
gcc main.cpp -o your_executable -lsqlite3 -lstdc++ -I. -L.
sqlite3_open
sqlite3_open
函数是 SQLite C/C++ 接口提供的函数之一,用于打开一个 SQLite 数据库文件。以下是对 sqlite3_open
函数的详细解释:
参数:
filename
:要打开的 SQLite 数据库文件的文件名,以 C 字符串形式传递。这个字符串通常是包含数据库文件路径的字符串。&db
:一个指向 sqlite3*
类型指针的指针。该指针将用于存储打开的数据库连接句柄。返回值:
int
类型。表示函数执行的结果或错误代码。常见的返回值包括:
SQLITE_OK (0)
:操作成功完成。SQLITE_ERROR
表示通用错误,SQLITE_CANTOPEN
表示无法打开数据库等。功能:
sqlite3_open
函数用于打开一个 SQLite 数据库文件,并返回一个表示数据库连接的句柄。sqlite3_exec
sqlite3_exec
函数是 SQLite C/C++ 接口提供的用于执行 SQL 语句的函数之一。它允许你执行一个或多个 SQL 语句,并为每个执行结果调用一个回调函数。以下是对 sqlite3_exec
函数的详细解释:
参数:
sqlite3 *db
:一个指向已经打开的 SQLite 数据库连接的指针。这个指针是通过 sqlite3_open
函数打开数据库后返回的。const char *sql
:要执行的 SQL 语句,以 C 字符串的形式传递。sqlite_callback
:一个函数指针,指向一个回调函数,用于处理 SQL 执行结果。void *data
:一个指针,用于传递给回调函数的数据,通常是一个结构体或其他数据类型的指针。char **errmsg
:一个指向字符指针的指针,用于接收错误信息。如果执行过程中发生错误,将在此指针指向的位置存储错误信息。返回值:
int
类型。表示函数执行的结果或错误代码。常见的返回值包括:
SQLITE_OK (0)
:操作成功完成。SQLITE_ERROR
表示通用错误,SQLITE_CONSTRAINT
表示违反约束等。功能:
sqlite3_exec
函数用于执行一个或多个 SQL 语句,并为每个执行结果调用一个回调函数。回调函数:
int callback(void *data, int argc, char **argv, char **azColName)
,其中:
data
:指向传递给 sqlite3_exec
函数的 void *data
参数。argc
:表示结果集中的列数。argv
:一个指向结果集中第一行数据的数组。azColName
:一个指向结果集中列名的数组。sqlite3_stmt*
sqlite3_stmt*
是 SQLite3 中用于表示预编译 SQL 语句的类型。以下是对 sqlite3_stmt*
的详细解释:
类型:
sqlite3_stmt*
是一个指向 SQLite3 语句对象的指针,它用于表示预编译的 SQL 语句。它的完整定义是 typedef struct sqlite3_stmt sqlite3_stmt;
,即 sqlite3_stmt
是一个结构体类型的别名。作用:
sqlite3_stmt*
类型的指针用于存储一个经过预编译的 SQL 语句的信息和状态。预编译的 SQL 语句可以包含参数,可以重复执行,提高了执行效率。创建:
sqlite3_stmt*
对象,通常需要使用 sqlite3_prepare_v2
或类似的函数来预编译 SQL 语句。这些函数会返回一个 sqlite3_stmt*
对象,该对象表示了预编译后的 SQL 语句。使用:
sqlite3_stmt*
对象,就可以使用该对象来执行预编译的 SQL 语句。可以通过调用 sqlite3_step
函数来执行 SQL 语句的一次步骤,或者通过调用 sqlite3_finalize
函数来释放 sqlite3_stmt*
对象所占用的资源。参数绑定:
sqlite3_stmt*
对象还可以用于将参数绑定到 SQL 语句中。参数绑定允许动态地设置 SQL 语句中的参数值,以防止 SQL 注入攻击,提高了代码的安全性。- sqlite3_stmt* stmt;
- const char* sql = "SELECT * FROM table WHERE column = ?";
- int result = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
- if (result != SQLITE_OK) {
- // 处理错误
- }
- // 执行其他操作,如参数绑定、执行 SQL 语句等
- int sqlite3_prepare_v2(
- sqlite3 *db, // SQLite 数据库连接对象
- const char *sql, // 要编译的 SQL 语句
- int sql_len, // SQL 语句的长度,如果为负数,则函数会自动计算长度
- sqlite3_stmt **stmt, // 用于存储编译后的语句对象的指针
- const char **tail // 指向未使用的部分的指针
- );
参数:
sqlite3 *db
:一个指向已经打开的 SQLite 数据库连接的指针。const char *sql
:要编译的 SQL 语句,以 C 字符串形式传递。int sql_len
:可选参数,表示 SQL 语句的长度。如果指定了负数,则函数会自动计算字符串的长度。sqlite3_stmt **stmt
:一个指向 sqlite3_stmt*
类型指针的指针,用于存储编译后的语句对象。const char **tail
:一个指向指针的指针,用于接收未使用的部分的指针。返回值:
int
类型,表示函数执行的结果或错误代码。常见的返回值包括:
SQLITE_OK (0)
:操作成功完成。SQLITE_ERROR
表示通用错误,SQLITE_NOMEM
表示内存分配失败等。功能:
sqlite3_prepare_v2
函数用于编译一个 SQL 语句,并将其转换为一个预处理语句对象,以便后续执行。sqlite3_bind_text
sqlite3_bind_text
是 SQLite3 中用于将文本数据绑定到预处理语句中的函数。它的作用是将一个文本字符串或字节数组绑定到预处理语句中的参数上,以供后续执行。以下是对 sqlite3_bind_text
函数的详细解释
- int sqlite3_bind_text(
- sqlite3_stmt* stmt, // 预处理语句对象
- int param_index, // 参数索引,从1开始
- const char* value, // 要绑定的文本数据
- int value_len, // 要绑定的文本数据的长度,如果为负数,则函数会自动计算长度
- void (*destructor)(void*) // 可选参数,用于释放 value 内存的回调函数
- );
参数:
sqlite3_stmt* stmt
:预处理语句对象,是通过 sqlite3_prepare_v2
函数编译后得到的对象。int param_index
:要绑定的参数的索引,从1开始。const char* value
:要绑定的文本数据,以 C 字符串形式传递。int value_len
:可选参数,表示要绑定的文本数据的长度。如果指定了负数,则函数会自动计算字符串的长度。void (*destructor)(void*)
:可选参数,用于指定一个回调函数,在预处理语句对象被销毁时释放 value
内存。如果不需要释放内存,可以传递 NULL
。返回值:
int
类型,表示函数执行的结果或错误代码。常见的返回值包括:
SQLITE_OK (0)
:操作成功完成。SQLITE_ERROR
表示通用错误,SQLITE_NOMEM
表示内存分配失败等。功能:
sqlite3_bind_text
函数用于将文本数据绑定到预处理语句中的参数上。sqlite3_step
sqlite3_step
是 SQLite3 中用于执行预处理语句的函数,它的作用是执行编译好的预处理语句,并返回执行结果。以下是对 sqlite3_step
函数的详细解释:
int sqlite3_step(sqlite3_stmt* stmt);
参数:
sqlite3_stmt* stmt
:预处理语句对象,是通过 sqlite3_prepare_v2
函数编译后得到的对象。返回值:
int
类型,表示函数执行的结果或错误代码。常见的返回值包括:
SQLITE_ROW
:表示执行成功,并且查询语句返回了一行数据。SQLITE_DONE
:表示执行成功,并且查询语句执行完毕,没有返回更多的数据。SQLITE_ERROR
表示通用错误,SQLITE_CONSTRAINT
表示违反约束等。功能:
sqlite3_step
函数用于执行预处理语句,并返回执行结果。sqlite3_step
函数执行一次查询步骤。sqlite3_step
函数成功时,返回值为 SQLITE_ROW
或 SQLITE_DONE
。SQLITE_ROW
表示查询语句返回了一行数据,而 SQLITE_DONE
表示查询执行完毕。sqlite3_step
函数将返回 SQLITE_ROW
,表示查询结果包含一行数据,然后你可以使用相关的函数(例如 sqlite3_column_int
、sqlite3_column_text
等)来获取该行数据的具体内容。然后,你可以继续调用 sqlite3_step
函数来获取下一行数据,直到它返回 SQLITE_DONE
,表示已经处理完所有的查询结果。- sqlite3_stmt *stmt;
- const char *sql = "SELECT column1, column2 FROM table";
-
- // 准备 SQL 语句
- int rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
- if (rc != SQLITE_OK) {
- // 错误处理
- }
-
- // 执行查询
- while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
- // 读取查询结果中的每一行数据
- int column1 = sqlite3_column_int(stmt, 0);
- const unsigned char *column2 = sqlite3_column_text(stmt, 1);
-
- // 处理查询结果
- // 例如,将数据存储到变量中,打印到控制台等
- }
-
- // 检查是否处理完所有结果
- if (rc != SQLITE_DONE) {
- // 错误处理
- }
-
- // 释放语句对象
- sqlite3_finalize(stmt);
sqlite3_finalize
sqlite3_finalize
函数用于释放预处理语句对象,它的作用是释放由 sqlite3_prepare_v2
函数创建的预处理语句对象所占用的资源,并清理相关的状态。以下是对 sqlite3_finalize
函数的详细解释:
int sqlite3_finalize(sqlite3_stmt* stmt);
参数:
sqlite3_stmt* stmt
:要释放的预处理语句对象,是通过 sqlite3_prepare_v2
函数编译后得到的对象。返回值:
int
类型,表示函数执行的结果或错误代码。常见的返回值包括:
SQLITE_OK (0)
:操作成功完成。SQLITE_ERROR
表示通用错误,SQLITE_MISUSE
表示参数错误等。功能:
sqlite3_finalize
函数用于释放预处理语句对象所占用的资源,并清理相关的状态。sqlite3_finalize
函数后,预处理语句对象将不再可用,不能再次执行。通常情况下,需要在使用完预处理语句对象后调用 sqlite3_finalize
函数进行释放,以避免资源泄漏。sqlite3_finalize
函数后,还可以通过其他函数来获取最终的执行结果。sqlite3_close
sqlite3_close
函数用于关闭 SQLite 数据库连接,释放相关资源,并将数据库连接对象关闭。以下是对 sqlite3_close
函数的详细解释:
int sqlite3_close(sqlite3* db);
参数:
sqlite3* db
:要关闭的 SQLite 数据库连接对象。返回值:
int
类型,表示函数执行的结果或错误代码。常见的返回值包括:
SQLITE_OK (0)
:操作成功完成。SQLITE_ERROR
表示通用错误,SQLITE_BUSY
表示数据库忙等。功能:
sqlite3_close
函数用于关闭 SQLite 数据库连接,并释放相关的资源。sqlite3_close
函数后,将不再能够使用指定的数据库连接对象进行数据库操作。sqlite3_close
函数之前,通常需要确保所有相关的预处理语句对象都已经释放,并且没有任何未完成的事务操作。sqlite3_column_int
sqlite3_column_int
是 SQLite3 中用于从结果集中获取整数类型数据的函数。以下是对 sqlite3_column_int
函数的详细解释:
int sqlite3_column_int(sqlite3_stmt* pStmt, int columnIndex);
参数:
sqlite3_stmt* pStmt
:预处理语句对象,通过 sqlite3_prepare_v2
编译后得到的对象。int columnIndex
:要获取数据的列索引,从0开始。返回值:
int
类型,表示从结果集中获取的整数值。如果列中的数据类型不是整数类型,则返回值将被转换为整数。功能:
sqlite3_column_int
函数用于从预处理语句执行结果中获取整数类型数据。使用这些基础函数搭建基本函数进行对数据库的操作,如,打开创建一个数据库,新键表,插入数据,删除数据,更改数据,查看数据。
- bool openDatabase(const char* filename) {
- int result = sqlite3_open(filename, &db);
- if (result != SQLITE_OK) {
- std::cerr << "Failed to open database: " << sqlite3_errmsg(db) << std::endl;
- return false;
- }
- std::cout << "Database opened successfully." << std::endl;
- return true;
- }
- bool createTable() {
- char *errMsg = nullptr;
- std::string sql = "CREATE TABLE IF NOT EXISTS floors ("
- "floors char(50) primary key NOT NULL,"
- "time_id int NOT NULL"
- ");";
-
-
- int result = sqlite3_exec(db, sql.c_str(), nullptr, nullptr, &errMsg);
- if (result != SQLITE_OK) {
- std::cerr << "SQL error: " << errMsg << std::endl;
- sqlite3_free(errMsg);
- return false;
- }
-
- return true;
- }
- bool insertDatabase(const std::string& floors, const int time_id) {
- if (!db) {
- std::cerr << "Database is not open." << std::endl;
- return false;
- }
-
- std::string sql = "INSERT INTO floors (floors, time_id) VALUES (?, ?);";
- sqlite3_stmt* stmt;
- int result = sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, nullptr);
- if (result != SQLITE_OK) {
- std::cerr << "Failed to prepare statement: " << sqlite3_errmsg(db) << std::endl;
- return false;
- }
-
- result = sqlite3_bind_text(stmt, 1, floors.c_str(), -1, SQLITE_STATIC);
- result |= sqlite3_bind_int(stmt, 2, time_id);
- if (result != SQLITE_OK) {
- std::cerr << "Failed to bind parameters: " << sqlite3_errmsg(db) << std::endl;
- sqlite3_finalize(stmt);
- return false;
- }
-
- result = sqlite3_step(stmt);
- if (result != SQLITE_DONE) {
- std::cerr << "Failed to execute statement: " << sqlite3_errmsg(db) << std::endl;
- sqlite3_finalize(stmt);
- return false;
- }
-
- std::cout << "Database updated successfully." << std::endl;
- sqlite3_finalize(stmt);
- return true;
- }
- bool deleteDatabase(const std::string& condition) {
- sqlite3_stmt *stmt;
- const char *tail;
- std::string sql = "DELETE FROM floors WHERE " + condition + ";";
-
- int result = sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, &tail);
- if (result != SQLITE_OK) {
- std::cerr << "SQL error: " << sqlite3_errmsg(db) << std::endl;
- sqlite3_close(db);
- return false;
- }
-
- result = sqlite3_step(stmt);
- if (result != SQLITE_DONE) {
- std::cerr << "Execution failed: " << sqlite3_errmsg(db) << std::endl;
- sqlite3_finalize(stmt);
- sqlite3_close(db);
- return false;
- }
-
- std::cout << "Database delete successfully." << std::endl;
- sqlite3_finalize(stmt);
- return true;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。