Programování SQLite ve výuce C

click fraud protection

Tento tutoriál je druhý v řadě programování SQLite v C.

SQLite ukládá sbírku tabulek do jednoho souboru databáze, obvykle končící na .db. Každá tabulka je jako tabulka, skládá se z několika sloupců a každý řádek má hodnoty.

Pokud to pomůže, přemýšlejte o každém řádku jako o struktur, s sloupce v tabulce odpovídající polím ve struktuře.

Tabulka může mít tolik řádků, kolik se vejde na disk. Existuje horní hranice, ale její obrovský počet je 18 446 744 073 709 551 616, abych byl přesný.

Tabulka může obsahovat až 2 000 sloupců, nebo pokud zdroj překompilujete, můžete jej maximalizovat na úžasných 32 767 sloupců.

API SQLite

Abychom mohli používat SQLite, musíme volat API. Úvod k tomuto API najdete na oficiálním webu Úvod do rozhraní SQLite C / C ++ webová stránka. Je to kolekce funkcí a snadné použití.

Nejprve potřebujeme popisovač k databázi. Toto je typu sqlite3 a je vráceno voláním sqlite3_open (filename, ** ppDB). Poté provedeme SQL.

Pojďme si ale nejprve trochu odbočit a vytvoříme použitelnou databázi a některé tabulky pomocí SQLiteSpy. (Viz předchozí výukový program, kde naleznete odkazy na tento prohlížeč a SQLite Database Browser).

instagram viewer

Události a místa konání

Databáze o. DB bude držet tři tabulky pro správu událostí na několika místech. Jedná se o večírky, diskotéky a koncerty a uskuteční se na pěti místech (alfa, beta, charlie, delta a echo). Když modelujete něco takového, často vám pomůže začít tabulkou. Kvůli jednoduchosti prostě uložím rande, ne čas.

Tabulka má tři sloupce: Data, Místo konání, Typ události a asi deset podobných událostí. Termíny běží od 21. do 30. června 2013.

Nyní SQLite nemá žádný výslovný typ data, takže je snazší a rychlejší uložit jej jako int a stejný způsob, jakým Excel používá data (dny od 1. ledna 1900), má int hodnoty 41446 až 41455. Pokud data vložíte do tabulky a naformátujete sloupec data jako číslo s 0 desetinnými místy, vypadá to takto:

Nyní bychom mohli tato data uložit do jedné tabulky a pro takový jednoduchý příklad by to pravděpodobně bylo přijatelné. Dobrá praxe při navrhování databáze však některé vyžaduje normalizace.

Jedinečné datové položky, jako je typ místa, by měly být ve své vlastní tabulce a typy událostí (párty atd.) By měly být také v jedné. A konečně, protože můžeme mít více typů událostí na více místech ((vztah mnoho k mnoha)), potřebujeme třetí tabulku, abychom je udrželi.

Tyto tři tabulky jsou:

  • místa - drží všech pět míst
  • eventtypes - obsahuje všechny tři typy událostí
  • události - obsahuje datum plus ID místa konání plus ID typu události. Přidal jsem také popisné pole pro tuto událost, např. „Jim's Birthday“.

První dvě tabulky obsahují datové typy, takže místa mají názvy alfa k echo. Přidal jsem také celé číslo a vytvořil jsem pro to index. S malým počtem míst (5) a typů událostí (3) by to mohlo být provedeno bez indexu, ale u větších tabulek bude velmi pomalý. Do jakéhokoli sloupce, který bude pravděpodobně hledán, přidejte index, nejlépe celé číslo

SQL k vytvoření je:

Index v tabulce událostí obsahuje datum, id-událost, typ události a místo. To znamená, že můžeme dotazovat tabulku událostí pro „všechny události v den“, „všechny události v místě konání“, „všechny strany“ atd. A kombinace těch, jako je „všechny strany v místě konání“ atd.

Po spuštění dotazů SQL create table jsou vytvořeny tři tabulky. Poznámka: Do textového souboru create.sql jsem vložil vše sql a obsahuje data pro naplnění některých ze tří tabulek.

Pokud dáte; na konci řádků, jak jsem to udělal v create.sql, pak můžete dávkovat a provádět všechny příkazy najednou. Bez; musíte každý spustit sám. V SQLiteSpy stačí kliknout na F9 a spustit vše.

Zahrnul jsem také sql pro vyřazení všech tří tabulek z víceřádkových komentářů pomocí / *.. * / stejné jako v C. Stačí vybrat tři řádky a provést ctrl + F9 k provedení vybraného textu.

Tyto příkazy vloží pět míst:

Opět jsem zahrnul komentovaný text do prázdných tabulek odstranit z linky. Není zpět, takže buďte opatrní s těmito!

Je úžasné, že se všemi načtenými daty (samozřejmě ne moc) je celý databázový soubor na disku pouze 7 kB.

Data události

Spíše než sestavení banda deseti příkazů vložení jsem použil Excel k vytvoření souboru CSV pro data událostí a poté k importu použil obslužný program příkazového řádku SQLite3 (dodávaný s SQLite) a následující příkazy to.

Poznámka: Jakýkoli řádek s předponou tečky (.) Je příkaz. Pro zobrazení všech příkazů použijte .help. Chcete-li spustit SQL, stačí jej zadat bez předpony období.

V cestě importu musíte pro každou složku použít dvojité lomítko \\. Poslední řádek udělejte až po úspěšném importu .importu. Při spuštění SQLite3 je výchozí oddělovač a: před importem musí být změněn na čárku.

Zpět na kód

Nyní máme plně osídlenou databázi, pojďme napsat C kód pro spuštění tohoto dotazu SQL, který vrací seznam stran, s popisem, daty a místy.

  • Jste novým jazykem SQL? Přečtěte si Co je SQL?

Tím dojde ke spojení pomocí sloupce idvenue mezi tabulkou událostí a míst, takže dostaneme název místa, nikoli jeho hodnotu int idvenue.

Funkce SQLite C API

Existuje mnoho funkcí, ale potřebujeme jen hrstku. Pořadí zpracování je:

  1. Otevřete databázi pomocí sqlite3_open (), ukončete, pokud se při otevírání vyskytne chyba.
  2. Připravte SQL pomocí sqlite3_prepare ()
  3. Smyčky pomocí slqite3_step (), dokud žádné další záznamy
  4. (Ve smyčce) zpracovat každý sloupec s sqlite3_column ...
  5. Nakonec zavolejte sqlite3_close (db)

Po volání sqlite3_prepare je volitelný krok, kde jsou vázány všechny předané parametry, ale toto si uložíme pro budoucí tutoriál.

Takže v níže uvedeném programu jsou pseudokód pro hlavní kroky:

Sql vrátí tři hodnoty, takže pokud sqlite3.step () == SQLITE_ROW, hodnoty se zkopírují z příslušných typů sloupců. Použil jsem int a text. Zobrazuji datum jako číslo, ale neváhejte jej převést na datum.

Výpis vzorového kódu

instagram story viewer