当前位置:首页 > 行业动态 > 正文

c三层架构进行数据库增删改查

在C三层架构中,数据库增删改查操作通常由数据访问层(DAL)负责。它通过调用存储过程或SQL语句与数据库交互,实现数据的增加、删除、修改和查询功能。

在C语言中实现三层架构进行数据库的增删改查操作,涉及到表示层、业务逻辑层和数据访问层的分离,下面将详细介绍如何在C语言中实现这一过程。

表示层 (Presentation Layer)

表示层主要负责与用户的交互,接收用户输入的数据,并显示处理结果,在C语言中,可以使用命令行界面或者图形用户界面(GUI)库来实现。

示例代码:

#include <stdio.h>
#include <stdlib.h>
void displayMenu() {
    printf("1. Add Record
");
    printf("2. Delete Record
");
    printf("3. Update Record
");
    printf("4. View Record
");
    printf("5. Exit
");
    printf("Enter your choice: ");
}
int main() {
    int choice;
    while (1) {
        displayMenu();
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                // Call function to add record
                break;
            case 2:
                // Call function to delete record
                break;
            case 3:
                // Call function to update record
                break;
            case 4:
                // Call function to view record
                break;
            case 5:
                exit(0);
            default:
                printf("Invalid choice. Please try again.
");
        }
    }
    return 0;
}

业务逻辑层 (Business Logic Layer)

c三层架构进行数据库增删改查

业务逻辑层包含应用程序的核心功能,如数据的验证、处理和规则的应用,它调用数据访问层来执行具体的数据库操作。

示例代码:

#include "data_access.h"
int addRecord(int id, const char* name) {
    if (validateData(id, name)) {
        return insertIntoDatabase(id, name);
    } else {
        return -1; // Error code for invalid data
    }
}
int deleteRecord(int id) {
    return deleteFromDatabase(id);
}
int updateRecord(int id, const char* newName) {
    if (validateData(id, newName)) {
        return updateDatabase(id, newName);
    } else {
        return -1; // Error code for invalid data
    }
}
int viewRecord(int id) {
    return fetchFromDatabase(id);
}

数据访问层 (Data Access Layer)

数据访问层直接与数据库交互,执行SQL查询或其他数据库操作,这通常通过数据库驱动或API完成。

c三层架构进行数据库增删改查

示例代码:

#include <mysql/mysql.h>
MYSQL *conn;
int connectToDatabase() {
    conn = mysql_init(NULL);
    if (!mysql_real_connect(conn, "host", "user", "password", "database", 0, NULL, 0)) {
        fprintf(stderr, "%s
", mysql_error(conn));
        return -1;
    }
    return 0;
}
int insertIntoDatabase(int id, const char* name) {
    char query[256];
    sprintf(query, "INSERT INTO records (id, name) VALUES (%d, '%s')", id, name);
    if (mysql_query(conn, query)) {
        fprintf(stderr, "%s
", mysql_error(conn));
        return -1;
    }
    return 0;
}
int deleteFromDatabase(int id) {
    char query[256];
    sprintf(query, "DELETE FROM records WHERE id = %d", id);
    if (mysql_query(conn, query)) {
        fprintf(stderr, "%s
", mysql_error(conn));
        return -1;
    }
    return 0;
}
int updateDatabase(int id, const char* newName) {
    char query[256];
    sprintf(query, "UPDATE records SET name = '%s' WHERE id = %d", newName, id);
    if (mysql_query(conn, query)) {
        fprintf(stderr, "%s
", mysql_error(conn));
        return -1;
    }
    return 0;
}
int fetchFromDatabase(int id) {
    char query[256];
    sprintf(query, "SELECT * FROM records WHERE id = %d", id);
    if (mysql_query(conn, query)) {
        fprintf(stderr, "%s
", mysql_error(conn));
        return -1;
    }
    MYSQL_RES *result = mysql_store_result(conn);
    if (result == NULL) {
        fprintf(stderr, "%s
", mysql_error(conn));
        return -1;
    }
    MYSQL_ROW row = mysql_fetch_row(result);
    if (row) {
        printf("ID: %s, Name: %s
", row[0], row[1]);
    } else {
        printf("No record found.
");
    }
    mysql_free_result(result);
    return 0;
}

FAQs

Q1: 如何在C语言中连接MySQL数据库?

A1: 在C语言中,可以通过MySQL C API来连接MySQL数据库,首先需要初始化一个MYSQL结构体,然后使用mysql_real_connect函数连接到数据库,确保提供正确的主机名、用户名、密码和数据库名称。

Q2: 如何验证用户输入的数据?

c三层架构进行数据库增删改查

A2: 在业务逻辑层中,可以编写验证函数来检查用户输入的数据是否符合预期的格式和范围,可以检查整数是否为正数,字符串是否为空等,如果数据无效,可以返回错误代码并在表示层提示用户重新输入。

小编有话说

在C语言中实现三层架构进行数据库的增删改查操作,虽然相对复杂,但可以提高代码的可维护性和可扩展性,通过分层设计,每一层都有明确的职责,使得代码更加模块化和易于管理,希望本文能为你在C语言中进行数据库操作提供一些帮助!