Programiranje SQLite v C Tutorial Two

click fraud protection

Ta vadnica je že druga v seriji programiranje SQLite v C.

SQLite shrani zbirko tabel v eno datoteko baze podatkov, ki se običajno konča v .db. Vsaka tabela je kot preglednica, sestavljena je iz več stolpcev in vsaka vrstica ima vrednosti.

Če pomaga, pomislite na vsako vrstico kot Stru, s stolpci v tabeli ki ustrezajo poljem v strukturi.

Tabela ima lahko toliko vrstic, kolikor jih bo na disku. Obstaja zgornja meja, vendar natančnih 18,446,744,073,709,551,616.

Tabela lahko vsebuje do 2.000 stolpcev ali pa če ponovno prevedete vir, ga lahko povečate na neverjetnih 32.767 stolpcev.

API SQLite

Za uporabo SQLite moramo klicati v API. Uvod v ta API najdete na uradni strani Uvod v vmesnik SQLite C / C ++ Spletna stran. Je zbirka funkcij in enostavna za uporabo.

Najprej potrebujemo ročaj baze podatkov. To je vrsta sqlite3 in se vrne s klicem na sqlite3_open (ime datoteke, ** ppDB). Po tem izvedemo SQL.

Najprej najprej rahlo odstopimo in ustvarimo uporabno bazo podatkov in nekaj tabel s pomočjo SQLiteSpy. (Povezave do tega in brskalnika SQLite Database si oglejte v prejšnjem vodniku).

instagram viewer

Dogodki in prizorišča

Baza podatkov o. DB bo imel tri tabele za upravljanje dogodkov na več prizoriščih. Ti dogodki bodo zabave, diskoteke in koncerti in se bodo odvijali na petih prizoriščih (alfa, beta, charlie, delta in odmev). Ko modelirate kaj takega, pogosto pomaga, da začnete s preglednico. Zaradi poenostavitve bom shranil samo datum in ne datum.

Preglednica ima tri stolpce: datume, kraj, dogodek in približno deset takšnih dogodkov. Termini trajajo od 21. do 30. junija 2013.

Zdaj SQLite nima izrecne vrste datuma, zato ga je lažje in hitreje shraniti kot int in enako kot Excel uporablja datume (dnevi od 1. januarja 1900) imajo vrednosti int 41446 do 41455. Če vstavite datume v preglednico in nato stolpec z datumom oblikujte kot število z decimalnimi mesti, je videti nekako takole:

Zdaj bi lahko te podatke shranili v eno tabelo in za tako preprost primer bi bil verjetno sprejemljiv. Kljub temu pa je potrebna dobra zasnova načrtovanja baz podatkov normalizacija.

Edinstvene podatkovne postavke, kot je vrsta prizorišča, morajo biti v svoji tabeli, vrste dogodkov (zabava itd.) Pa naj bodo tudi v eni. In končno, ker lahko imamo več vrst dogodkov na več prizoriščih, (odnos številni do številni) potrebujemo tretjo tabelo, ki jih drži.

Tri tabele so:

  • prizorišča - ima vseh pet prizorišč
  • eventtypes - vsebuje vse tri vrste dogodkov
  • dogodki - vsebuje datum plus id prizorišča plus ID vrste dogodka. Dodala sem tudi opisno polje za ta dogodek, npr. "Jimov rojstni dan".

Prve dve tabeli vsebujejo vrste podatkov, tako da imajo prizorišča imena alfa do odmeva. Prav tako sem dodal celo število id in ustvaril indeks za to. Z majhnim številom prizorišč (5) in vrstami dogodkov (3) bi to lahko potekalo brez indeksa, pri večjih tabelah pa bo šlo zelo počasi. Vsakemu stolpcu, ki bo verjetno iskan, dodajte indeks, po možnosti celo število

SQL za ustvarjanje tega je:

Indeks v tabeli dogodkov ima datum, id-dogodek, vrsto dogodka in kraj dogodka. To pomeni, da lahko v tabeli dogodkov poiščemo "vse dogodke na datumu", "vse dogodke na prizorišču", "vse zabave" itd in kombinacije tistih, kot so "vse zabave na prizorišču" itd.

Po zagonu poizvedbe tabele SQL ustvarite tri tabele. Opomba Vse te sql sem vstavil v besedilno datoteko create.sql in vključuje podatke za napolnitev nekaterih treh tabel.

Če postavite; na koncu vrstic, kot sem to storil v create.sql, lahko nato vse ukaze v enem samem koraku sestavite in izvedete. Brez; moraš vsak zagnati sam. V SQLiteSpy kliknite F9 in zaženite vse.

Vključil sem tudi sql, da spustim vse tri tabele v več vrsticnih komentarjih z / *.. * / enako kot v C. Samo izberite tri vrstice in naredite ctrl + F9 za izvedbo izbranega besedila.

Ti ukazi vstavijo pet prizorišč:

Spet sem v prazne tabele vključil komentirano besedilo z brisanje iz črte. Razveljavitve ni, zato bodite previdni s temi!

Neverjetno je, da je z vsemi naloženimi podatki (najbrž ne veliko) celotna datoteka baze podatkov na disku le 7KB.

Podatki o dogodkih

Namesto da sem sestavil kup desetih vstavljenih stavkov, sem Excel uporabil datoteko .csv za podatke o dogodkih nato pa za uvoz uporabili pripomoček ukazne vrstice SQLite3 (ki je priložen SQLite) in naslednje ukaze to.

Opomba: Vsaka vrstica s predpono (()) je ukaz. Uporabite .help za ogled vseh ukazov. Če želite zagnati SQL, ga preprosto vnesite brez predpone.

Na poti uvoza za vsako mapo morate uporabiti dvojne črne črte \\. Zadnjo vrstico opravite šele, ko je .import uspel. Ko SQLite3 zažene privzeti ločevalnik je: zato ga je treba pred uvozom spremeniti v vejico.

Nazaj na kodeks

Zdaj imamo v celoti naseljeno bazo podatkov, zapišimo C koda zagnati to poizvedbo SQL, ki vrne seznam strank, z opisom, datumi in kraji.

  • Ste novi v SQL? Preberite, kaj je SQL?

S tem se pridruži stolpec idvenue med tabelo dogodkov in prizorišč, tako da dobimo ime prizorišča, ne njegovo vrednost int idvenue.

Funkcije API SQLite C

Funkcij je veliko, potrebujemo pa le peščico. Vrstni red obdelave je:

  1. Odprite bazo podatkov s sqlite3_open (), zapustite, če jo odprete.
  2. Pripravite SQL s sqlite3_prepare ()
  3. Z zanko uporabite slqite3_step (), dokler ne bo več zapisov
  4. (V zanki) obdelajte vsak stolpec s stolpcem sqlite3_column ...
  5. Končno pokličite sqlite3_close (db)

Po klicu sqlite3_prepričajte se, kje so vsi parametri vezani, vendar jih bomo shranili za prihodnjo vadnico.

Torej v programu, ki je spodaj naveden psevdo koda, so glavni koraki:

Sql vrne tri vrednosti, torej če sqlite3.step () == SQLITE_ROW, potem so vrednosti kopirane iz ustreznih vrst stolpcev. Uporabil sem int in besedilo. Datum prikažem kot številko, vendar ga lahko spremenim v datum.

Seznam primerov kode

instagram story viewer