使用C++将SQLite3数据库封装
时间: 2024-06-10 14:10:09 浏览: 187
基于标准库的C++ sqlite3常用功能封装和使用
SQLite3是一个开源的轻量级关系型数据库管理系统,适用于嵌入式设备和移动平台。在C语言中,可以使用SQLite3 API来操作数据库,包括创建表、插入数据、查询数据、更新数据等操作。为了方便使用,可以将SQLite3数据库封装成一个C语言库,提供更简单的接口供应用程序调用。
以下是一个简单的SQLite3封装库示例:
```c
#include <stdio.h>
#include <string.h>
#include <sqlite3.h>
/* 封装SQLite3数据库操作 */
typedef struct {
sqlite3* db;
char* errmsg;
} Sqlite3;
/* 打开数据库 */
int sqlite3_open_db(Sqlite3* sqlite, const char* db_path) {
int ret = sqlite3_open(db_path, &sqlite->db);
if (ret != SQLITE_OK) {
sqlite->errmsg = sqlite3_errmsg(sqlite->db);
return -1;
}
return 0;
}
/* 关闭数据库 */
void sqlite3_close_db(Sqlite3* sqlite) {
sqlite3_close(sqlite->db);
}
/* 执行SQL语句 */
int sqlite3_exec_sql(Sqlite3* sqlite, const char* sql) {
int ret = sqlite3_exec(sqlite->db, sql, NULL, NULL, &sqlite->errmsg);
if (ret != SQLITE_OK) {
return -1;
}
return 0;
}
/* 查询数据 */
int sqlite3_query_data(Sqlite3* sqlite, const char* sql,
int (*callback)(void*, int, char**, char**), void* data) {
int ret = sqlite3_exec(sqlite->db, sql, callback, data, &sqlite->errmsg);
if (ret != SQLITE_OK) {
return -1;
}
return 0;
}
/* 示例:创建表 */
int sqlite3_create_table(Sqlite3* sqlite, const char* table_name, const char* fields) {
char sql[256];
sprintf(sql, "CREATE TABLE IF NOT EXISTS %s (%s)", table_name, fields);
return sqlite3_exec_sql(sqlite, sql);
}
/* 示例:插入数据 */
int sqlite3_insert_data(Sqlite3* sqlite, const char* table_name, const char* values) {
char sql[256];
sprintf(sql, "INSERT INTO %s VALUES (%s)", table_name, values);
return sqlite3_exec_sql(sqlite, sql);
}
/* 示例:查询数据 */
int sqlite3_query_data(Sqlite3* sqlite, const char* table_name) {
char sql[256];
sprintf(sql, "SELECT * FROM %s", table_name);
return sqlite3_query_data(sqlite, sql, callback, NULL);
}
/* 示例:回调函数 */
int callback(void* data, int argc, char** argv, char** azColName) {
int i;
for (i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
/* 示例:主函数 */
int main() {
Sqlite3 sqlite;
if (sqlite3_open_db(&sqlite, "test.db") != 0) {
printf("Open database failed: %s\n", sqlite.errmsg);
return -1;
}
if (sqlite3_create_table(&sqlite, "user", "id INT PRIMARY KEY, name TEXT, age INT") != 0) {
printf("Create table failed: %s\n", sqlite.errmsg);
sqlite3_close_db(&sqlite);
return -1;
}
if (sqlite3_insert_data(&sqlite, "user", "1, 'Tom', 20") != 0) {
printf("Insert data failed: %s\n", sqlite.errmsg);
sqlite3_close_db(&sqlite);
return -1;
}
if (sqlite3_query_data(&sqlite, "user") != 0) {
printf("Query data failed: %s\n", sqlite.errmsg);
sqlite3_close_db(&sqlite);
return -1;
}
sqlite3_close_db(&sqlite);
return 0;
}
```
以上代码演示了如何使用SQLite3 API封装一个简单的数据库操作库,其中包括打开数据库、关闭数据库、执行SQL语句、查询数据等操作,并提供了示例代码。在实际应用中,可以根据需要扩展更多的接口,以满足不同的业务需求。
阅读全文