C语言实现数据库操作类:支持SQLite和MySQL
在C语言中,没有直接支持面向对象的语法特性,但可以通过结构体和函数指针来模拟封装类的概念。下面是一个简单的示例,封装了同时支持SQLite和MySQL操作的类。
#include <stdio.h>
#include <stdlib.h>
// 数据库操作接口定义
typedef struct {
void (*connect)();
void (*disconnect)();
void (*query)(const char* sql);
} DatabaseInterface;
// SQLite数据库操作实现
void sqliteConnect() {
printf('SQLite: Connecting to the database...
');
// 连接SQLite数据库的具体实现
}
void sqliteDisconnect() {
printf('SQLite: Disconnecting from the database...
');
// 断开SQLite数据库连接的具体实现
}
void sqliteQuery(const char* sql) {
printf('SQLite: Executing query: %s\n', sql);
// 执行SQLite查询的具体实现
}
// MySQL数据库操作实现
void mysqlConnect() {
printf('MySQL: Connecting to the database...
');
// 连接MySQL数据库的具体实现
}
void mysqlDisconnect() {
printf('MySQL: Disconnecting from the database...
');
// 断开MySQL数据库连接的具体实现
}
void mysqlQuery(const char* sql) {
printf('MySQL: Executing query: %s\n', sql);
// 执行MySQL查询的具体实现
}
// 数据库操作类定义
typedef struct {
DatabaseInterface* dbInterface;
} Database;
// 初始化数据库操作类
void initDatabase(Database* db, const char* dbType) {
db->dbInterface = (DatabaseInterface*)malloc(sizeof(DatabaseInterface));
if (strcmp(dbType, "sqlite") == 0) {
db->dbInterface->connect = sqliteConnect;
db->dbInterface->disconnect = sqliteDisconnect;
db->dbInterface->query = sqliteQuery;
} else if (strcmp(dbType, "mysql") == 0) {
db->dbInterface->connect = mysqlConnect;
db->dbInterface->disconnect = mysqlDisconnect;
db->dbInterface->query = mysqlQuery;
} else {
printf("Unsupported database type: %s\n", dbType);
free(db->dbInterface);
db->dbInterface = NULL;
}
}
// 连接数据库
void connectDatabase(Database* db) {
if (db->dbInterface) {
db->dbInterface->connect();
} else {
printf("No database interface initialized.\n");
}
}
// 断开数据库连接
void disconnectDatabase(Database* db) {
if (db->dbInterface) {
db->dbInterface->disconnect();
} else {
printf("No database interface initialized.\n");
}
}
// 执行查询
void executeQuery(Database* db, const char* sql) {
if (db->dbInterface) {
db->dbInterface->query(sql);
} else {
printf("No database interface initialized.\n");
}
}
// 测试代码
int main() {
Database db;
// 初始化SQLite数据库
initDatabase(&db, "sqlite");
connectDatabase(&db);
executeQuery(&db, "SELECT * FROM table");
disconnectDatabase(&db);
// 初始化MySQL数据库
initDatabase(&db, "mysql");
connectDatabase(&db);
executeQuery(&db, "SELECT * FROM table");
disconnectDatabase(&db);
// 初始化不支持的数据库类型
initDatabase(&db, "oracle");
connectDatabase(&db);
executeQuery(&db, "SELECT * FROM table");
disconnectDatabase(&db);
return 0;
}
在上述示例中,我们使用了结构体DatabaseInterface来定义数据库操作的接口,其中包含了连接、断开连接和查询方法的函数指针。然后,我们使用结构体Database来表示封装了数据库操作的类,其中包含了一个指向DatabaseInterface的指针。
通过initDatabase函数,我们根据指定的数据库类型初始化了dbInterface成员,使其指向对应的数据库操作实现。然后,通过connectDatabase、disconnectDatabase和executeQuery函数,我们可以连接数据库、断开数据库连接和执行查询操作,并调用相应的数据库操作实现。
在main函数中,我们演示了如何使用该数据库操作类,先初始化SQLite数据库,然后连接数据库、执行查询操作,最后断开数据库连接。然后,我们再演示了同样的操作流程,但是使用了MySQL数据库。最后,我们还演示了对于不支持的数据库类型,会输出相应的错误提示信息。
请注意,上述示例只是一个简单的示意,具体的数据库操作实现需要根据实际情况进行编写。此外,为了简化示例,我们并未处理错误情况,实际应用中需要根据具体情况进行错误处理。
原文地址: https://www.cveoy.top/t/topic/jBPV 著作权归作者所有。请勿转载和采集!