我完成的一个DBMS内核源码(可进入嵌入式定制)

本文介绍了作者my2005lb开发的LiuSQL数据库管理系统,包括数据库配置的插入、读取、创建和删除操作,以及表的创建、删除和字段管理。代码展示了如何处理数据库和表的元数据,以及文件操作。这是一个适合嵌入式系统的DBMS内核,可用于定制开发。
摘要由CSDN通过智能技术生成

/*

作者:my2005lb

项目代号:LiuSQL ver 1.0

*/

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream.h>
#include<string.h>
#include<windows.h>
#include<vector>
#include<math.h>

using namespace std;


struct database
{
 char cdatabasename[200];
 char cpath[200];
 char cauthor[50];
 char ctime[19];
};
//用于表示数据库头
vector<database> databasehead;

//用于查入数据库配置信息
int insertConfigSys(struct database infor)
{
 if(&infor == NULL)
 {
  printf("要插入的记录不能为空......../n");
  return -1;
 }

    FILE *fp;
 
 if((fp=fopen("configsys.dcy","ab+"))==NULL)
 {
  printf("读取数据库配置信息失败......../n");
  return -1;
 }
   
 if(fwrite(&infor,sizeof(database),1,fp)!=1)
 {
       printf("插入数据库配置信息失败......../n");
  return -1;
 }

 databasehead.push_back(infor);
    fclose(fp);
 return 0 ;

}
int readConfigSys()
{
    FILE *fp;
 
 if((fp=fopen("configsys.dcy","rb"))==NULL)
 {
 // printf("打开源文件configsys.dcy出错/n");
 
  return -1;
 }
 printf("***********************************/n");
 int i=1;
 database buf;
 while(!feof(fp))
 {
  if(fread(&buf,sizeof(database),1,fp))
  {
        //  printf(" %d %s %s %s %s/n",i,buf.cauthor,buf.cdatabasename,buf.cpath,buf.ctime );
  // cout<<i<<"  "<<buf.name<<"    "<<buf.salary<<"/n"; 
       databasehead.push_back(buf);
   
  }
  i++;
  
 }
// printf("共找到%d条记录/n",i-2);
// printf("***********************************/n");
 fclose(fp);
   
 return 0;
}

int createDatabase(char *databasename)
{
   char currentDir[200];
   GetCurrentDirectory(199,currentDir);
   strcat(currentDir,"//data//");
   strcat(currentDir,databasename);
 

   if( CreateDirectory(currentDir,NULL) == 1 )
   {
   // printf("数据库%s创建成功    /n",databasename);
    return 1 ;
   }
    return -1;
}

int dropDatabase(char *databasename)
{
   char currentDir[200];
   GetCurrentDirectory(199,currentDir);
   strcat(currentDir,"//data//");
   strcat(currentDir,databasename);

   if(RemoveDirectory(currentDir)==1)
   {
    return 1 ;
   }
    return 0 ;
}

enum DataType{VARCHAR,LINT,LSINT,IMAGE,TEXT,LFLOAT,LDATE,LTIME,LDATETIME};

typedef struct
{
    char fieldname[200];
 DataType type;
 bool anull;
 int length;
 int indextype;
}FieldList ;

//用于记录的字段列表
//
vector<FieldList> fieldhead;

int insertFieldStruct(char *tablename,FieldList infor)
{
 if(&infor == NULL||tablename ==NULL)
 {
  printf("要插入的记录不能为空......../n");
  return -1;
 }

    FILE *fp;
 char *filename = (char *)malloc(strlen(tablename)+4);
    strcpy(filename,tablename);
 strcat(filename,".lts");
 if((fp=fopen(filename,"ab+"))==NULL)
 {
  printf("配置字段信息失败......../n");
  return -1;
 }
   
 if(fwrite(&infor,sizeof(FieldList),1,fp)!=1)
 {
       printf("插入配置字段信息失败......../n");
  return -1;
 }

 fieldhead.push_back(infor);
    fclose(fp);
 return 0 ;

}
int readFieldStruct(char *tablename)
{
    FILE *fp;
    char *filename = (char *)malloc(strlen(tablename)+4);
 strcpy(filename,tablename);
 strcat(filename,".lst");
 if((fp=fopen(filename,"rb"))==NULL)
 {
  printf("打开源文件%s出错/n",filename);
 
  return -1;
 }
 printf("***********************************/n");
 int i=1;
 FieldList buf;
 while(!feof(fp))
 {
  if(fread(&buf,sizeof(FieldList),1,fp))
  {
          printf(" %d %s %d %d %d /n",i,buf.fieldname ,buf.length,buf.anull ,buf.indextype  );
  // cout<<i<<"  "<<buf.name<<"    "<<buf.salary<<"/n"; 
       fieldhead.push_back(buf);
   
  }
  i++;
  
 }
 printf("共找到%d条记录/n",i-2);
 printf("***********************************/n");
 fclose(fp);
   
 return 0;
}

struct TableList
{
 char ctablename[255];
 char ctime[19];
 char cauthor[50];
};

//用于保存表的列表
vector<TableList> tablehead;

int insertConfigTable(struct TableList infor)
{
 if(&infor == NULL)
 {
  printf("要插入的记录不能为空......../n");
  return -1;
 }

    FILE *fp;
 
 if((fp=fopen("configtable.dcy","ab+"))==NULL)
 {
  printf("读取数据库配置信息失败......../n");
  return -1;
 }
   
 if(fwrite(&infor,sizeof(TableList),1,fp)!=1)
 {
       printf("插入数据库配置信息失败......../n");
  return -1;
 }

 tablehead.push_back(infor);
    fclose(fp);
 return 0 ;

}
int readConfigTable()
{
    FILE *fp;
 
 if((fp=fopen("configtable.dcy","rb"))==NULL)
 {
  printf("打开源文件configtable.dcy出错/n");
 
  return -1;
 }
 printf("***********************************/n");
 int i=1;
 TableList buf;
 while(!feof(fp))
 {
  if(fread(&buf,sizeof(TableList),1,fp))
  {
          printf(" %d %s %s %s/n",i,buf.cauthor,buf.ctablename,buf.ctime );
  // cout<<i<<"  "<<buf.name<<"    "<<buf.salary<<"/n"; 
       tablehead.push_back(buf);
   
  }
  i++;
  
 }
 printf("共找到%d条记录/n",i-2);
 printf("***********************************/n");
 fclose(fp);
   
 return 0;
}

/*
用于表的创建
*/
int createTable(char *tablename,vector<FieldList> head)
{
 //create three files
 //then write filedinfor to XXX.lts
 //
 FILE *fltd,*flid,*flst;//分别表示数据文件,索引文件与结构文件
 char *filename1 = (char *)malloc(strlen(tablename)+4);
 char *filename2 = (char *)malloc(strlen(tablename)+4);
 char *filename3 = (char *)malloc(strlen(tablename)+4);
    strcpy(filename1,tablename);
 strcat(filename1,".lst");
 strcpy(filename2,tablename);
 strcat(filename2,".lid");
 strcpy(filename3,tablename);
 strcat(filename3,".ltd");
 if((flst=fopen(filename1,"ab+"))==NULL)
 {
  printf("配置字段信息失败......../n");
  return -1;
 }
 vector<FieldList>::iterator Datalist;
    for(Datalist = head.begin();Datalist!=head.end();Datalist++)
 {
    fwrite(Datalist,sizeof(FieldList),1,flst);
 }
 fclose(flst);
 if((flid=fopen(filename2,"ab+"))==NULL)
 {
  printf("配置字段信息失败......../n");
  return -1;
 }
 fclose(flid);
 if((fltd=fopen(filename3,"ab+"))==NULL)
 {
  printf("配置字段信息失败......../n");
  return -1;
 }
    fclose(fltd);
 
    return 1;
}

/*
执行drop table命令 将三张表删除
*/
void dropTable(char *tablename)
{
 char *filename1 = (char *)malloc(strlen(tablename)+4);
 char *filename2 = (char *)malloc(strlen(tablename)+4);
 char *filename3 = (char *)malloc(strlen(tablename)+4);
    strcpy(filename1,tablename);
 strcat(filename1,".lst");
 strcpy(filename2,tablename);
 strcat(filename2,".lid");
 strcpy(filename3,tablename

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值