如何使用结构创建数据库表

我正在尝试使用c接口创建和存储数据库。 我有一个包含一些变量和数据类型的结构表。 我如何将它们转换为数据库表。 详情如下。 在,database.c文件中,我初始化了createTable函数和包含约束和数据类型的Folder_table结构,我有一个函数连接到firebird中的数据库。 一旦我读到这个结构,我想知道如何将这个结构转换成表并将其存储在数据库中。 (我可以用sprintf做些什么吗?)

**database.c:** #include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h" #include  #include  void* CreateTable(char *tableName, uint rows) { int error = 0; void *table; //// Allocate table table = Allocate(GetTableSize(tableName)*rows); //// List table pointers for(uint rowNumber=0; rowNumber < rows; rowNumber++) { //// Add code to Connect linked list row pointers } return error; } typedef struct Folder_Table // Table type name gets "_Table" added to the SQLite name { //// Fields // Comments are added to seperate the fields, Relationships, and metadata int folderID; // Fields are added as elements of the type and length listed in SQLite float field1; int field2; float field3; char field4[40]; // string length '40' is queried from SQLite settings for field } Folder_Table; int SQLOpen(void) { char logInData [256]; short bufferLength; sprintf(logInData, "%c%c%c%c%c%c%s%c%c%s", isc_dpb_version1, isc_dpb_num_buffers, 1, 90, isc_dpb_user_name, strlen("SYSDBA"), "SYSDBA", isc_dpb_password, strlen("masterkey"), "masterkey"); bufferLength = strlen(logInData); if (isc_attach_database(status_vector, strlen(DATABASE_PATH), DATABASE_PATH, &DatabaseHandle,bufferLength, logInData)) { isc_print_status(status_vector); } return 0; } **main.c:** #include  #include #include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h" char Query[] = "SELECT * FROM Folder_Table WHERE ID = 3"; int main(int argc, char *argv[]) { SQLOpen(); Folder_Table *myTable; myTable = CreateTable("Folder_Table", ONE_ROW); } 

你已经开始定义你的folder_table布局了。 如果这是您的表需要的数据,那么就完成了。 这里没有魔力。 您只需要使用您为表定义的字段顺序中的SQL INSERT命令将结构成员写入表中。

目前,您的folder_table函数和sprintf的使用似乎只是将您的所有登录信息收集到logInData缓冲区中,然后附加到数据库。 如果成功附加,则需要循环来遍历所有结构数据,并使用SQL INSERT命令将该数据插入到表中。 你还没有代码。

您可以尝试使用simlar来插入结构值本身。 您需要以类似的方式创建SQL插入语句。 将构建一个类似于"INSERT INTO tablename (FIELD1, FIELD2, FIELD3, FIELD4) VALUES ('VALUE1', 'VALUE2', 'VALUE3', VALUE4');" 同样附加到您的数据库并为每个结构元素执行该sql命令。

您可以继续使用firebird,也可以使用sqlite本身提供的C-API。 我没有使用过firebird,所以我不知道与提供的SQLite API相比会有多麻烦,但SQLite C-API相对简单直接。

作为语法,只需参考SQLite C / C ++接口简介以使用SQLite连接器,或者查看Firebird连接和API以获取firebird连接。

最重要的是, 选择键盘并尝试编码之前 ,请确保已定义数据库和表格布局。 大部分混淆似乎来自这样一个事实,即您并不确切地知道您希望包含结构数据的表格看起来像什么。 如果您的struct Folder_Table是您想要的定义,那么在创建表的情况下,遍历您的结构数据并在每次迭代时使用insert命令将成员写出来。

在定义表格后,有许多示例可帮助您实现表格。 SQLite C / C ++教程

这可能是我可以根据您的代码所在位置给出的最佳路线图。 将你的结构成员映射到你的INSERT语句,然后如果你遇到困难,你可以提出一个更具体的问题(例如,为什么我做错了…)