C++操作SQLite简明教程
本教程将介绍如何使用C++操作SQLite数据库,包括数据库的创建、表的创建、数据的插入、查询和更新等常见操作。
安装SQLite
在开始之前,需要先安装SQLite。SQLite是一个轻型数据库,可以在各个操作系统上使用。在Ubuntu系统上,可以通过以下命令安装:
sudo apt-get install sqlite3 libsqlite3-dev
对于其他系统,可以去官网下载相应的安装包进行安装。
创建和连接数据库
要创建一个新的数据库,可以使用以下代码:
#include <sqlite3.h>
int result = sqlite3_open("example.db", &database);
if (result != SQLITE_OK) {
std::cerr << "Error opening database: " << sqlite3_errmsg(database) << std::endl;
sqlite3_close(database);
return false;
}
上述代码会在当前目录下创建一个名为example.db的数据库。如果数据库创建失败,将打印出错误信息,并关闭数据库连接。如果创建成功,可以通过sqlite3_close()函数关闭数据库连接。
创建表格
在数据库中创建表格,可以使用以下代码:
std::string sql = "CREATE TABLE example_table ( \
id INTEGER PRIMARY KEY, \
name TEXT, \
age INTEGER);";
int result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
std::cerr << "Error creating table: " << errorMsg << std::endl;
sqlite3_free(errorMsg);
return false;
}
以上代码创建了一个名为example_table的表格,包含了id、name和age三个字段。其中,id为整型,是该表格的主键;name为文本类型,age为整型。如果创建成功,将返回SQLITE_OK,否则将打印错误信息。在这里,使用sqlite3_free()函数释放存储错误信息的字符串指针。
插入数据
可以使用以下代码向表格中插入数据:
std::string sql = "INSERT INTO example_table (id, name, age) VALUES (1, 'Tom', 20);";
int result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
std::cerr << "Error inserting data: " << errorMsg << std::endl;
sqlite3_free(errorMsg);
return false;
}
以上代码向example_table表格中插入了一条数据,其中id为1,name为Tom,age为20。如果插入成功,将返回SQLITE_OK,否则将打印错误信息并返回false。
查询数据
可以使用以下代码来查询表格中的数据:
std::string sql = "SELECT * FROM example_table;";
sqlite3_stmt* statement;
int result = sqlite3_prepare_v2(database, sql.c_str(), -1, &statement, nullptr);
if (result != SQLITE_OK) {
std::cerr << "Error preparing statement: " << sqlite3_errmsg(database) << std::endl;
sqlite3_finalize(statement);
return false;
}
while (sqlite3_step(statement) == SQLITE_ROW) {
int id = sqlite3_column_int(statement, 0);
std::string name = reinterpret_cast<const char*>(sqlite3_column_text(statement, 1));
int age = sqlite3_column_int(statement, 2);
std::cout << "id: " << id << ", name: " << name << ", age: " << age << std::endl;
}
sqlite3_finalize(statement);
以上代码使用了sqlite3_prepare_v2()函数准备了一个查询语句,然后使用sqlite3_step()函数遍历查询得到的结果集。在遍历结果集的过程中,通过sqlite3_column_int()和sqlite3_column_text()等函数获取指定字段的值。注意,在查询完毕后,需要使用sqlite3_finalize()函数释放查询准备的sqlite3_stmt对象。
更新数据
可以使用以下代码来更新表格中的数据:
std::string sql = "UPDATE example_table SET age=25 WHERE name='Tom';";
int result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
std::cerr << "Error updating data: " << errorMsg << std::endl;
sqlite3_free(errorMsg);
return false;
}
以上代码将example_table表格中name为Tom的记录的age字段更新为25。如果更新成功,将返回SQLITE_OK,否则将打印错误信息并返回false。
示例说明
以下为两个示例,分别说明了如何使用本教程中的代码进行数据库操作。
示例1:创建表格并插入数据
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* database;
int result = sqlite3_open("example.db", &database);
if (result != SQLITE_OK) {
std::cerr << "Error opening database: " << sqlite3_errmsg(database) << std::endl;
sqlite3_close(database);
return -1;
}
std::string sql = "CREATE TABLE example_table ( \
id INTEGER PRIMARY KEY, \
name TEXT, \
age INTEGER);";
char* errorMsg;
result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
std::cerr << "Error creating table: " << errorMsg << std::endl;
sqlite3_free(errorMsg);
sqlite3_close(database);
return -1;
}
sql = "INSERT INTO example_table (id, name, age) VALUES (1, 'Tom', 20);";
result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
std::cerr << "Error inserting data: " << errorMsg << std::endl;
sqlite3_free(errorMsg);
sqlite3_close(database);
return -1;
}
sqlite3_close(database);
return 0;
}
以上代码创建了一个名为example_table的表格,并向其中插入了一条数据。如果执行成功,将在当前目录下生成一个名为example.db的数据库文件。
示例2:查询表格中的数据并更新
#include <iostream>
#include <sqlite3.h>
int main() {
sqlite3* database;
int result = sqlite3_open("example.db", &database);
if (result != SQLITE_OK) {
std::cerr << "Error opening database: " << sqlite3_errmsg(database) << std::endl;
sqlite3_close(database);
return -1;
}
std::string sql = "SELECT * FROM example_table;";
sqlite3_stmt* statement;
result = sqlite3_prepare_v2(database, sql.c_str(), -1, &statement, nullptr);
if (result != SQLITE_OK) {
std::cerr << "Error preparing statement: " << sqlite3_errmsg(database) << std::endl;
sqlite3_finalize(statement);
sqlite3_close(database);
return -1;
}
while (sqlite3_step(statement) == SQLITE_ROW) {
int id = sqlite3_column_int(statement, 0);
std::string name = reinterpret_cast<const char*>(sqlite3_column_text(statement, 1));
int age = sqlite3_column_int(statement, 2);
std::cout << "id: " << id << ", name: " << name << ", age: " << age << std::endl;
}
sqlite3_finalize(statement);
sql = "UPDATE example_table SET age=25 WHERE name='Tom';";
char* errorMsg;
result = sqlite3_exec(database, sql.c_str(), nullptr, nullptr, &errorMsg);
if (result != SQLITE_OK) {
std::cerr << "Error updating data: " << errorMsg << std::endl;
sqlite3_free(errorMsg);
sqlite3_close(database);
return -1;
}
sqlite3_close(database);
return 0;
}
以上代码查询了example_table表格中的所有数据,并输出结果。然后,将表格中name为Tom的记录的age字段更新为25。如果执行成功,将更新数据库文件中的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++操作SQLite简明教程 - Python技术站