SQLite'i programmeerimine C-õppematerjalides

See õpetus on teine ​​sarjast programmeerimine SQLite C-s.

SQLite salvestab tabelikogumi ühes failis andmebaas, lõppedes tavaliselt .db-ga. Iga tabel on nagu arvutustabel, see koosneb mitmest veerust ja igal real on väärtused.

Kui see aitab, mõelge igale reale kui a-le struct, koos veerud tabelis mis vastavad väljal väljadele.

Tabelis võib olla nii palju ridu, kui mahub kettale. On olemas ülemine piir, kuid selle täpsus 18,446,744,073,709,551,616 on suur.

Tabelis võib olla kuni 2000 veergu või kui allikat uuesti kompileerida, saate selle maksimeerida fantastiliselt 32 767 veergu.

SQLite API

SQLite'i kasutamiseks peame helistama API-le. Selle API tutvustamise leiate ametnikelt SQLite C / C ++ liidese sissejuhatus veebileht. See on funktsioonide kogum ja seda on lihtne kasutada.

Esiteks vajame andmebaasi käepidet. See on sqlite3 tüüpi ja tagastatakse kõnega sqlite3_open (failinimi, ** ppDB). Pärast seda käivitame SQL.

Vaatame kõigepealt pisut kõrvale ja looge SQLiteSpy abil kasutatav andmebaas ja mõned tabelid. (Selle ja Lingi andmebaasi brauseri linkide kohta lugege eelmist õpetust).

instagram viewer

Üritused ja kohad

Andmebaas DB hoiab ürituste haldamiseks mitmes kohas kolme tabelit. Need üritused on peod, diskod ja kontserdid ning toimuvad viies kohas (alfa, beeta, charlie, delta ja kaja). Midagi sellist modelleerides aitab see sageli algust arvutustabeliga. Lihtsuse huvides ma salvestan kuupäeva, mitte kellaaega.

Arvutustabelil on kolm veergu: kuupäevad, koht, sündmuse tüüp ja umbes kümme sündmust. Kuupäevad kestavad 21. – 30. Juuni 2013.

Nüüd pole SQLite'il selget kuupäeva tüüpi, seega on seda lihtsam ja kiirem int-failina salvestada ning samal viisil, nagu Excel kasutab kuupäevi (päevad alates 1. jaanuarist 1900), int-väärtused on 41446–4455. Kui paned kuupäevad arvutustabelisse, vormindage kuupäeva veerg numbrina koos 0-kohase koma, näeb see välja umbes järgmine:

Nüüd saaksime neid andmeid ühte tabelisse salvestada ja sellise lihtsa näite jaoks oleks see ilmselt vastuvõetav. Hea andmebaasi kujundamise tava nõuab siiski mõnda normaliseerimine.

Ainulaadsed andmeüksused, näiteks toimumiskoha tüüp, peaksid olema eraldi tabelis ja ka sündmuste tüübid (pidu jne). Lõpuks, kuna meil võib olla erinevat tüüpi üritusi erinevates kohtades (suhe paljudest paljudesse), vajame nende hoidmiseks kolmandat tabelit.

Kolm tabelit on järgmised:

  • kohad - hoiab kõiki viit kohta
  • sündmustüübid - hõlmab kõiki kolme tüüpi sündmusi
  • sündmused - hoiab kuupäeva pluss koha ID ja sündmuse tüübi ID. Lisasin sellele sündmusele ka kirjeldusvälja, nt "Jimi sünnipäev".

Esimeses kahes tabelis on andmetüübid, nii et toimumiskohtadel on nimed, mida kajastada. Olen lisanud ka täisarvu ID ja loonud selleks indeksi. Väikese arvu kohtade (5) ja üritustüüpide (3) korral saaks seda teha ilma indeksita, kuid suuremate tabelite korral läheb see väga aeglaselt. Lisage iga veerg, mida tõenäoliselt otsitakse, indeks, eelistatavalt täisarv

Selle loomiseks kasutatav SQL on:

Sündmustetabeli register sisaldab kuupäeva, ID-sündmust, sündmuse tüüpi ja toimumiskohta. See tähendab, et võime päringute tabelist küsida päringuid "kõik kuupäeval toimuvad sündmused", "kõik sündmuse toimumiskohas toimuvad üritused", "kõik peod" jne ja nende kombinatsioone, näiteks "kõik peokohad ürituse toimumiskohas" jne.

Pärast SQL-i tabeli päringute käivitamist luuakse kolm tabelit. Pange tähele, et ma panin kogu selle sql-i tekstifaili create.sql ja see sisaldab andmeid mõne kolme tabeli täitmiseks.

Kui paned; kui rea lõpuosas olen seda teinud saidil create.sql, saate kõik käsud korraga pakkida ja käivitada. Ilma; peate igaüks ise hakkama saama. SQLiteSpy-s klõpsake kõige käitamiseks lihtsalt F9.

Olen lisanud ka sql, et kõik kolm tabelit mitmerealiste kommentaaride alla kukutada, kasutades nuppu *. * / sama nagu C-s. Valige lihtsalt kolm rida ja tehke valitud teksti täitmiseks klahvikombinatsioon Ctrl + F9.

Need käsud sisestavad viis kohta:

Olen jällegi tühjadesse tabelitesse kommenteerinud teksti koos kustuta read. Tagasivõtmist ei ole, nii et ole nende suhtes ettevaatlik!

Hämmastav, et kõigi laaditud andmetega (muidugi mitte palju) on kogu ketta andmebaasifail ainult 7KB.

Sündmuse andmed

Kümne sisestuslause hulga moodustamise asemel kasutasin Exceli abil sündmusandmete .csv-faili loomist ning seejärel importimiseks SQLite3 käsuridade utiliiti (mis on kaasas SQLite'iga) ja järgmisi käske seda.

Märkus. Mis tahes rida, millel on perioodi (.) Eesliide, on käsk. Kõigi käskude kuvamiseks kasutage .help. SQL-i käivitamiseks tippige see ilma perioodi prefiksita.

Iga kausta jaoks tuleb imporditeel kasutada topeltmõõdulisi \\ \\. Tehke viimane rida alles pärast .importi õnnestumist. Kui SQLite3 töötab, on vaikeseparaator a: seega tuleb see enne importimist komaga muuta.

Tagasi koodeksi juurde

Nüüd on meil täielikult asustatud andmebaas, kirjutame C-kood selle SQL päringu käivitamiseks, mis tagastab osapoolte loendi koos kirjelduse, kuupäevade ja toimumiskohtadega.

  • Kas olete uus SQL? Lugege, mis on SQL?

See liitub sündmuste ja toimumiskohtade tabeli vahelise veeruga, seega saame koha nime, mitte selle sisemise väärtuse.

SQLite C API funktsioonid

Funktsioone on palju, kuid meil on vaja ainult käputäis. Töötlemise järjekord on järgmine:

  1. Avage andmebaas sqlite3_open () abil, väljuge, kui teil on selle avamisel viga.
  2. SQL-i ettevalmistamine rakendusega sqlite3_prepare ()
  3. Looge, kasutades slqite3_step (), kuni rohkem kirjeid pole
  4. (Silmus) töötlege iga veergu sqlite3_column ...
  5. Lõpuks helistage sqlite3_close (db)

Pärast sqlite3_prepare helistamist on valikuline samm, kus kõik parameetritesse ületatud seotakse, kuid salvestame selle edaspidiseks õpetuseks.

Allpool loetletud programmis on peamiste sammude pseudokood järgmised:

Sql tagastab kolm väärtust, nii et kui sqlite3.step () == SQLITE_ROW, siis kopeeritakse väärtused sobivatest veerutüüpidest. Olen kasutanud int ja teksti. Kujutan kuupäeva numbrina, kuid teisendage see kuupäevaks julgelt.

Näidiskoodi loetelu

instagram story viewer