gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:46:17 25 4
gpt4 key购买 nike

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

**database.c:**
#include "/Library/Frameworks/Firebird.framework/Versions/A/Headers/ibase.h"
#include <stdio.h>
#include <string.h>

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 <stdio.h>
#include<string.h>
#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命令将该数据插入到表中。您还没有相应的代码。

您可能可以做一些类似的事情来插入结构值本身。您需要以类似的方式创建 SQL 插入语句。它将构建一个缓冲区,其中包含类似于 "INSERT INTO tablename (FIELD1, FIELD2, FIELD3, FIELD4) VALUES ('VALUE1', 'VALUE2', 'VALUE3', VALUE4');" 的内容同样附加到您的数据库并为每个结构元素执行该 sql 命令。

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

语法请引用An Introduction To The SQLite C/C++ Interface使用 SQLite 连接器,或查看 Firebird Connectivity and API用于 Firebird 连接。

最重要的是,在拿起键盘并尝试编码之前,请确保您已经定义了数据库和表格布局。大部分困惑似乎来自这样一个事实:您并不确切知道您希望包含结构数据的表是什么样子。如果您struct Folder_Table是您想要的定义,然后创建表后,循环遍历结构数据并在每次迭代时使用插入命令写出成员。

在定义表格的外观后,有许多示例可以帮助您实现表格。 SQLite C/C++ Tutorial .

根据您的代码情况,这可能是我可以给出的最佳路线图。努力将结构成员映射到 INSERT陈述,那么如果你遇到困难,你可以问一个更具体的问题(例如为什么我在做...时会出错)

关于c - 如何使用结构创建数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24210085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com