8

我想使用 C 编程创建数据库。

我想创建员工数据库系统并想动态更新它。请指导我如何继续。

对于作为闪存的嵌入式系统,我必须这样做。数据库需要存储在该闪存上,并且我需要能够动态更新它。文件和建议很有价值。

4

3 回答 3

9

您可以使用structsfile operations来写入和读取文件。但是,这些操作可能不像MYSQL其他数据库那样快速高效。

示例代码:

/*  employee database program       */

#include <stdio.h>
#include <string.h>

typedef struct vehicle
{
    char name[100];
    int roll;
    int salary;
    char address[100];
    int join_year;
}record;

int main(void)
{
    int i , choice;
    FILE *fp1,*fp2;
    char oname[100];
    record det;
    int recsize;
    char c;

    fp1 = fopen("record.dat" , "r+");
    if(fp1 == NULL)
    {
        fp1 = fopen("record.dat" , "w+");
        if(fp1 == NULL)
        {
            printf("error in opening file : \n");
            return -1;
        }
    }
    recsize = sizeof(det);

    fseek(fp1 , 0 ,SEEK_END);
    printf("Enter employee Name : ");
    scanf("%[^\n]" , det.name);
    printf("Enter roll number   : ");
    scanf("%d" , &det.roll);
    printf("Enter the salary    : ");
    scanf("%d" , &det.salary);
    scanf("%c" , &c);
    printf("Enter address   : ");
    scanf("%[^\n]" , det.address);
    printf("Enter joining year  : ");
    scanf("%d" , &det.join_year);
    fwrite(&det,recsize,1,fp1);
}

有关在 c 中创建数据库的更多详细信息,您可以从以下视频中获取指导

于 2013-06-14T06:52:55.103 回答
3

你那里有操作系统吗?linux,qnx?如果这样做,请检查是否有任何可用的本机解决方案。例如 mysql、postgresql、sqlite。如果那里有任何东西 - 请查看他们的文档。

如果您使用的是裸机,请继续阅读。

我认为最好的开始方法是使用简单的哈希表,这样您就可以快速查询。

U-boot 的哈希表可以作为一个好的开始。

https://github.com/lentinj/u-boot/blob/master/lib/hashtable.c

接下来,您需要将其存储在闪存中。为了防止在写入期间断电,我会保留至少两份您的数据副本。为了实现这一点,您需要一些校验和来添加到您的数据结构中,例如 crc32。看到这个:

http://www.barrgroup.com/Embedded-Systems/How-To/CRC-Calculation-C-Code

最后,如果你有很多数据和(不是那么多)闪存,你会想以某种方式压缩数据。我真的推荐使用热收缩压缩算法。它很简单,甚至可以在 atmel avrs 上使用

于 2016-06-19T19:16:49.157 回答
-1

可以在c中创建数据库,但是效率非常低,并且需要付出很多努力,所以如果使用mysql或postgres来处理数据库会更好。

于 2016-06-17T10:13:38.400 回答