在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成员,使其指向对应的数据库操作实现。然后,通过connectDatabasedisconnectDatabaseexecuteQuery函数,我们可以连接数据库、断开数据库连接和执行查询操作,并调用相应的数据库操作实现。

main函数中,我们演示了如何使用该数据库操作类,先初始化SQLite数据库,然后连接数据库、执行查询操作,最后断开数据库连接。然后,我们再演示了同样的操作流程,但是使用了MySQL数据库。最后,我们还演示了对于不支持的数据库类型,会输出相应的错误提示信息。

请注意,上述示例只是一个简单的示意,具体的数据库操作实现需要根据实际情况进行编写。此外,为了简化示例,我们并未处理错误情况,实际应用中需要根据具体情况进行错误处理。

C语言实现数据库操作类:支持SQLite和MySQL

原文地址: https://www.cveoy.top/t/topic/jBPV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录