Az SQLite programozása a C második bemutatóban

click fraud protection

Ez az oktatóprogram a második a sorozatban programozás SQLite a C.

SQLite a táblázatok gyűjteményét egyetlen fájlban tárolja adatbázis, általában .db-vel végződik. Minden táblázat olyan, mint egy táblázat, több oszlopból áll, és minden sornak vannak értékei.

Ha ez segít, gondoljon minden sorra, mint egy struct, a... val oszlopok a táblázatban ami megfelel a szerkezet mezőinek.

Egy táblázatnak annyi sorja lehet, amennyire a lemezre elfér. Van egy felső határ, de annak hatalmas 18,446,744,073,709,551,616 pontosan.

Egy táblázat legfeljebb 2000 oszlopot tartalmazhat, vagy ha újrafordítja a forrást, akkor maximalizálhatja egy fantasztikus 32 767 oszlopig.

Az SQLite API

Az SQLite használatához fel kell hívnunk az API-t. Az API bevezetését a hivatalos oldalon találja meg Bevezetés az SQLite C / C ++ interfészbe honlap. Ez egy funkciók gyűjteménye, és könnyen kezelhető.

Először szükségünk van egy kezelőre az adatbázishoz. Ez az sqlite3 típusú, és az sqlite3_open hívással tér vissza (fájlnév, ** ppDB). Ezután végrehajtjuk a SQL.

instagram viewer

Először készítsünk egy kis eltérést, és hozzunk létre egy használható adatbázist és néhány táblát az SQLiteSpy használatával. (Az erre mutató linkeket és az SQLite adatbázis-böngészőt lásd az előző oktatóanyagban).

Rendezvények és helyszínek

Az adatbázis a. A DB három helyet fog tartani az események kezelésére több helyszínen. Ezek az események partik, diszkók és koncertek lesznek, és öt helyszínen zajlanak (alfa, béta, charlie, delta és visszhang). Ha valami ilyesmit modellez, ez gyakran segít a táblázat elindításában. Az egyszerűség kedvéért dátumot tárolok, nem időt.

A táblázatnak három oszlop van: Dátumok, Helyszín, Eseménytípus és körülbelül tíz ilyen esemény. A dátumok 2013. június 21-30-ig tartanak.

Most az SQLite-nek nincs pontos dátumtípusa, így könnyebb és gyorsabb int formátumban tárolni, és ugyanúgy, mint az Excel dátumok (1900. január 1. óta eltelt napok) 41446–44555 int értékei vannak. Ha a dátumokat táblázatba helyezi, majd a dátum oszlopot 0-tól eltérő számmal formázza, úgy néz ki:

Most ezeket az adatokat egy táblában tárolhatjuk, és egy ilyen egyszerű példára valószínűleg elfogadható lenne. A jó adatbázis-tervezési gyakorlat azonban megköveteli néhányat normalizálás.

Az egyedi adatelemeknek, például a helyszín típusának a saját táblázatában kell lennie, és az eseménytípusoknak (party stb.) Is egynek kell lenniük. Végül, mivel több eseménytípus is létezik több helyszínen (sok-sok kapcsolat), harmadik táblázatra van szükségünk ezek megtartásához.

A három táblázat:

  • helyszínek - mind az öt helyszínt tartja
  • eventtypes - mind a három eseménytípust tartalmazza
  • események - tartja a dátumot, a helyszín azonosítóját, valamint az esemény típusa. Az eseményhez leírómezőt is hozzáadtam, pl. "Jim születésnapja".

Az első két táblázat az adattípusokat tartalmazza, így a helyszíneknek alfa-visszhangokkal kell rendelkezniük. Én egész számot is hozzáadtam, és ehhez indexet készítettem. A helyszínek kis száma (5) és az eseménytípusok (3) esetén index nélkül is megtehető, de nagyobb táblázatokkal nagyon lassú lesz. Tehát minden valószínűleg keresendő oszlophoz adjon hozzá egy indexet, lehetőleg egész számot

Az SQL a következő létrehozásához:

Az eseménytáblázat indexe tartalmazza a dátumot, az id-eseményt, az esemény típusát és a helyszínt. Ez azt jelenti, hogy lekérdezhetjük az eseménytáblát "minden dátummal kapcsolatos eseményre", "a helyszínen zajló összes eseményre", "minden félre" stb., Valamint ezek kombinációira, például "a rendezvény helyszínén zajló összes fél" stb.

Az SQL létrehozása tábla lekérdezések futtatása után a három tábla létrejön. Megjegyzés: Mindegyik sql-et beillesztettem a create.sql szövegfájlba, és tartalmaz adatokat a három tábla néhány feltöltéséhez.

Ha felteszed; a sorok végén, ahogyan ezt a create.sql-ben megtettem, akkor az összes parancsot kötegelt és végrehajtható egyszerre. Nélkül; mindegyiket önmagában kell futtatnia. Az SQLiteSpy alkalmazásban csak kattintson az F9-re, hogy mindent futtasson.

Azt is felvettem az sql-hez, hogy mind a három táblát a / * gombbal a több soros megjegyzésekbe dobjam. * / megegyezik a C-vel Csak válassza ki a három sort, és nyomja meg a Ctrl + F9 billentyűket a kiválasztott szöveg végrehajtásához.

Ezek a parancsok illesztik be az öt helyszínt:

Megint az üres táblázatokhoz hozzáfűztem a kommentált szöveget a törlés a vonalak. Nincs visszavonás, ezért legyen óvatos ezekkel!

Meglepő módon, az összes betöltött adat mellett (természetesen nem sok) az egész adatbázis fájl a lemezen csak 7KB.

Eseményadatok

Ahelyett, hogy összeállítanánk egy tíz beillesztési nyilatkozatot, az Excel segítségével hoztam létre .csv fájlt az eseményadatokhoz majd az SQLite3 parancssori segédprogramot (amely az SQLite-hez tartozik) és a következő parancsokat importálta azt.

Megjegyzés: A pont (.) Előtaggal rendelkező sor parancs. Használja a .help parancsot az összes parancs megtekintéséhez. Az SQL futtatásához írja be pont nélküli előtag nélkül.

Mindegyik mappa importálási útvonalában dupla blacsot \\ kell használni. Csak akkor végezze el az utolsó sort, miután a .import sikeres volt. Az SQLite3 futtatásakor az alapértelmezett elválasztó a: tehát vesszőre kell változtatni az importálás előtt.

Vissza a Kódexhez

Most van egy teljesen lakott adatbázisunk, írjuk a C kód az SQL lekérdezés futtatásához, amely visszaadja a felek listáját, leírással, dátumokkal és helyszínekkel.

  • Új vagy az SQL? Olvassa el Mi az SQL?

Ez összekapcsolódik az idvenue oszlop segítségével az események és helyszínek táblázata között, így a helyszín nevét kapjuk, nem pedig az int idvenue értékét.

SQLite C API funkciók

Sok funkció van, de csak néhányra van szükségünk. A feldolgozás sorrendje:

  1. Nyissa meg az adatbázist az sqlite3_open () paranccsal, ha nem sikerült megnyitni, lépjen ki.
  2. Készítse elő az SQL-t az sqlite3_prepare () segítségével
  3. Hurkolja a slqite3_step () felhasználásával, amíg nincs több rekord
  4. (A hurokban) dolgozzon fel minden oszlopot az sqlite3_column segítségével ...
  5. Végül hívja az sqlite3_close (db)

Van egy opcionális lépés az sqlite3_prepare meghívása után, ahol a paraméterekben átadott paraméterek kötelezőek, de ezt egy későbbi oktatóprogramhoz mentjük.

Tehát az alább felsorolt ​​programban a fő lépések álnevek:

Az sql három értéket ad vissza, tehát ha sqlite3.step () == SQLITE_ROW, akkor az értékeket a megfelelő oszloptípusokból másolja át. Használtam int és szöveget. A dátumot számként jeleníti meg, de bátran konvertálhatja dátumra.

Példakód felsorolása

instagram story viewer