main函数里打开数据库过后怎么通过结构体,实现在自定义函数里做数据表的创建和数据插入
时间: 2024-12-22 20:17:18 浏览: 4
在C++中,如果你有一个包含数据库连接信息的结构体,并且已经在`main`函数中成功打开了数据库连接,那么在自定义函数中操作数据库通常会遵循这样的步骤:
首先,你需要将数据库连接作为一个成员变量存储在你的结构体中。例如:
```cpp
struct DatabaseConnection {
sqlite3* db; // 这里假设使用SQLite作为数据库引擎
string connectionString;
};
// 在主函数中建立连接并初始化结构体
DatabaseConnection conn;
if (sqlite3_open(conn.connectionString.c_str(), &conn.db) != SQLITE_OK) {
// 处理错误...
}
```
接下来,在自定义函数中,你可以创建一个新的函数,这个函数接受`DatabaseConnection`类型的参数,以便访问连接:
```cpp
void createTable(DatabaseConnection& dbConnection) {
const char* sql = "CREATE TABLE IF NOT EXISTS my_table (column1 INTEGER PRIMARY KEY, column2 TEXT);";
if (sqlite3_exec(dbConnection.db, sql, NULL, NULL, &errMsg) != SQLITE_OK) {
// 处理SQL执行错误...
}
}
void insertData(DatabaseConnection& dbConnection, int id, string value) {
const char* sql = "INSERT INTO my_table (column1, column2) VALUES (?, ?)";
sqlite3_stmt* stmt;
if (sqlite3_prepare_v2(dbConnection.db, sql, -1, &stmt, NULL) == SQLITE_OK) {
sqlite3_bind_int(stmt, 1, id);
sqlite3_bind_text(stmt, 2, value.c_str(), -1, SQLITE_TRANSIENT);
if (sqlite3_step(stmt) != SQLITE_DONE) {
// 处理插入错误...
}
sqlite3_finalize(stmt);
} else {
// 处理准备语句错误...
}
}
```
要在其他地方调用这些函数,只需传入已经打开连接的`DatabaseConnection`实例即可:
```cpp
createTable(conn);
insertData(conn, 42, "Some value");
```
阅读全文