我想使用 C 编程创建数据库。
我想创建员工数据库系统并想动态更新它。请指导我如何继续。
对于作为闪存的嵌入式系统,我必须这样做。数据库需要存储在该闪存上,并且我需要能够动态更新它。文件和建议很有价值。
您可以使用structs
和file 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 中创建数据库的更多详细信息,您可以从以下视频中获取指导
你那里有操作系统吗?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 上使用
可以在c中创建数据库,但是效率非常低,并且需要付出很多努力,所以如果使用mysql或postgres来处理数据库会更好。