Програмиране на SQLite в урок второ

click fraud protection

Този урок е вторият от поредицата на програмиране SQLite в С.

SQLite съхранява колекция от таблици в един файл база данни, обикновено завършваща в .db. Всяка таблица е като електронна таблица, тя се състои от няколко колони и всеки ред има стойности.

Ако помага, помислете за всеки ред като a структура, с колони в таблицата съответстващи на полетата в структурата.

Таблицата може да има толкова редове, колкото ще се побере на диск. Има горна граница, но нейните огромни 18,446,744,073,709,551,616 да бъдат точни.

Таблицата може да съдържа до 2000 колони или ако прекомпилирате източника, можете да го увеличите до страхотни 32 767 колони.

API на SQLite

За да използваме SQLite, трябва да осъществим обаждания към API. Можете да намерите въведение в този API на официалния Въведение в SQLite C / C ++ интерфейс уеб страница. Това е набор от функции и лесен за използване.

Първо се нуждаем от дръжка към базата данни. Това е от типа sqlite3 и се връща чрез повикване към sqlite3_open (име на файл, ** ppDB). След това изпълняваме SQL.

instagram viewer

Нека първо да направим леко отклонение и да създадем използваема база данни и някои таблици, използвайки SQLiteSpy. (Вижте предишния урок за връзки към него и браузъра на базата данни на SQLite).

Събития и места

Базата данни за. DB ще държи три таблици за управление на събития на няколко места. Тези събития ще бъдат партита, дискотеки и концерти и ще се провеждат на пет места (алфа, бета, чарли, делта и ехо). Когато моделирате нещо подобно, често помага да започнете с електронна таблица. За простота, просто ще запазя дата, а не час.

Електронната таблица има три колони: дати, място, тип на събитието и около десет подобни събития. Датите текат от 21 до 30 юни 2013 г.

Сега SQLite няма категоричен тип дата, така че е по-лесно и по-бързо да го съхранявате като int и по същия начин, по който Excel използва дати (дни от 1 януари 1900 г.) имат int стойности 41446 до 41455. Ако поставите датите в електронна таблица и след това форматирате колоната за дата като число с 0 десетични знака, изглежда така:

Сега бихме могли да съхраним тези данни в една таблица и за такъв прост пример вероятно би било приемливо. Въпреки това добрата практика за проектиране на база данни изисква някои нормализиране.

Уникални елементи от данни като типа на мястото трябва да са в собствената си таблица, а типовете събития (парти и т.н.) също трябва да бъдат в една. И накрая, тъй като можем да имаме няколко типа събития на множество места, (връзка между много и много), ние се нуждаем от трета таблица, за да ги държим.

Трите таблици са:

  • места за провеждане - съдържа всички пет места
  • eventtypes - съдържа и трите типа събития
  • събития - държи датата плюс идентификационния номер на мястото плюс идентификационния номер на събитието. Добавих и поле за описание на това събитие, например „Рожден ден на Джим“.

Първите две таблици съдържат типовете данни, така че местата имат имена алфа до ехо. Добавих и цяло число, и създадох индекс за това. С малкия брой места (5) и типове събития (3) може да се направи без индекс, но с по-големи таблици ще се получи много бавно. Така че към всяка колона, в която е вероятно да се търси, добавете индекс, за предпочитане цяло число

SQL за създаване на това е:

Индексът в таблицата със събития има дата, id-събитие, тип на събитието и място. Това означава, че можем да заявим таблицата на събитията за „всички събития на дата“, „всички събития на място“, „всички партита“ и т.н. и комбинации от такива като „всички партита на място“ и т.н.

След стартиране на SQL създаване на заявки за таблица, трите таблици се създават. Забележка Поставих целия този sql в текстовия файл create.sql и той включва данни за попълване на някои от трите таблици.

Ако сложите; в края на редовете, както направих в create.sql, тогава можете да групирате и изпълнявате всички команди в един замах. Без; трябва да стартирате всеки от себе си. В SQLiteSpy просто щракнете върху F9, за да стартирате всичко.

Включих и sql, за да пусна и трите таблици в многоредовите коментари, използвайки / *.. * / същото като в В. Просто изберете трите реда и направете ctrl + F9, за да изпълните избрания текст.

Тези команди вмъкват петте места:

Отново включих коментиран текст в празните таблици, с изтриване от линии. Няма отмяна, така че внимавайте с тях!

Удивително е, че с всички заредени данни (признавам, че не е много), целият файл на базата данни на диска е само 7KB.

Данни за събитията

Вместо да натрупам куп от десет вмъкнати изречения, използвах Excel за създаване на .csv файл за данните на събитието и след това използвах помощната програма за команден ред SQLite3 (която идва със SQLite) и следните команди за импортиране то.

Забележка: Всеки ред с префикс период (.) Е команда. Използвайте .help, за да видите всички команди. За да стартирате SQL, просто го въведете без префикс за период.

Трябва да използвате двойни черни черти \\ в пътя за импортиране за всяка папка. Последният ред направете само след успеха на .import. Когато SQLite3 работи, разделителят по подразбиране е: така че той трябва да бъде променен на запетая преди импортирането.

Обратно към Кодекса

Сега имаме напълно населена база данни, нека да напишем C код да стартирате тази SQL заявка, която връща списък на партии, с описание, дати и места.

  • Нови ли сте за SQL? Прочетете Какво е SQL?

Това прави присъединяване, използвайки колоната idvenue между таблицата на събитията и местата, така че получаваме името на мястото, а не неговата стойност int idvenue.

SQLite C API функции

Има много функции, но имаме нужда само от шепа. Редът за обработка е:

  1. Отворете базата данни с sqlite3_open (), излезте, ако имате грешка при отварянето.
  2. Подгответе SQL с sqlite3_prepare ()
  3. Цикъл използва slqite3_step (), докато няма повече записи
  4. (В цикъла) обработвайте всяка колона с sqlite3_column ...
  5. Накрая извикайте sqlite3_close (db)

Има незадължителна стъпка след извикване на sqlite3_prepare, където всички свързани параметри са обвързани, но ще ги запишем за бъдещ урок.

Така че в изброената по-долу програма псевдо код за основните стъпки са:

Sql връща три стойности, така че ако sqlite3.step () == SQLITE_ROW, тогава стойностите се копират от съответните типове колони. Използвал съм int и text. Показвам датата като число, но не се колебайте да я преобразувате в дата.

Списък на примерен код

instagram story viewer