Как создать таблицы базы данных с использованием структур

Я пытаюсь создать и хранить базы данных с помощью 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 для вставки этих данных в вашу таблицу. У вас пока нет кода.

Вы можете сделать что-то похожее на вставку самих значений структуры. Вам нужно будет создать свои инструкции вставки SQL аналогичным образом. Что-то, что будет создавать буфер, имеющий нечто похожее на "INSERT INTO tablename (FIELD1, FIELD2, FIELD3, FIELD4) VALUES ('VALUE1', 'VALUE2', 'VALUE3', VALUE4');" Аналогично присоединитесь к своей базе данных и выполните команду sql для каждого элемента структуры.

Вы можете либо продолжить работу с firebird, либо использовать C-API, предоставляемый самим sqlite. Я не использовал firebird, поэтому я не знаю, сколько проблем будет по сравнению с поставляемым SQLite API, но SQLite C-API относительно прост и прост.

Для синтаксиса просто обратитесь к разделу «Введение в интерфейс SQLite C / C ++», чтобы использовать соединитель SQLite, или взгляните на интерфейс Firebird Connectivity и API для подключения Firebird .

Прежде всего, убедитесь, что вы определили свою базу данных и таблицу, прежде чем подбирать клавиатуру и пытаетесь ее закодировать. Большая часть путаницы, похоже, исходит из того факта, что вы не знаете точно, что вы хотите, чтобы ваша таблица, содержащая ваши данные структуры, выглядела. Если ваша struct Folder_Table – это определение, которое вы хотите, то с созданной таблицей struct Folder_Table свои структурные данные и напишите члены с помощью команды insert на каждой итерации.

Существует множество примеров, которые помогут вам реализовать таблицу после определения того, как она будет выглядеть. Учебник по SQLite C / C ++ .

Это, вероятно, лучшая дорожная карта, которую я могу дать, основываясь на том, где, по-видимому, вы используете свой код. Поработайте над отображением члена вашей структуры в свои INSERT , а затем, если вы застряли, вы можете задать более конкретный вопрос (например, почему я получаю сообщение об ошибке …)