Programavimas SQLite C pamoksle antras

Šis mokymas yra antrasis serijoje programavimas SQLite C.

SQLite vienoje rinkmenoje saugo lentelių kolekciją duomenų bazę, paprastai baigiasi .db. Kiekviena lentelė yra kaip skaičiuoklė, ją sudaro keli stulpeliai ir kiekviena eilutė turi reikšmes.

Jei tai padeda, pagalvokite apie kiekvieną eilutę kaip apie struktūra, su stulpelius lentelėje atitinkančius laukus statinyje.

Lentelėje gali būti tiek eilučių, kiek tilps diske. Yra viršutinė riba, tačiau tiksli jos didžiulė 18,446,744,073,709,551,616.

Lentelėje gali būti iki 2000 stulpelių arba, jei iš naujo sukompiliuosite šaltinį, galite maksimaliai padidinti ją iki nuostabių 32 767 stulpelių.

„SQLite“ API

Norėdami naudoti SQLite, turime skambinti į API. Šios API įvadą galite rasti oficialiame puslapyje Įvadas į SQLite C / C ++ sąsają tinklo puslapis. Tai funkcijų rinkinys, kurį lengva naudoti.

Pirmiausia mums reikia duomenų bazės tvarkyklės. Tai yra „sqlite3“ tipas ir grąžinamas paskambinus į „sqlite3_open“ (failo pavadinimas, ** ppDB). Po to vykdome SQL.

instagram viewer

Vis dėlto pirmiausia leiskime šiek tiek nukrypti ir sukurkime naudingą duomenų bazę bei kai kurias lenteles naudodami „SQLiteSpy“. (Nuorodos į tai ir „SQLite“ duomenų bazės naršyklę ieškokite ankstesniame vadove).

Renginiai ir vietos

Duomenų bazė apie. DB turės tris lenteles įvykiams tvarkyti keliose vietose. Šie renginiai bus vakarėliai, diskotekos ir koncertai. Jie vyks penkiose vietose (alfa, beta, charlie, delta ir aido). Kai modeliuojate kažką panašaus, tai dažnai padeda pradėti nuo skaičiuoklės. Paprastumo dėlei aš įrašysiu datą, o ne laiką.

Skaičiuoklę sudaro trys stulpeliai: Datos, Vieta, Įvykio tipas ir maždaug dešimt panašių įvykių. Datos galioja 2013 m. Birželio 21–30 d.

Dabar „SQLite“ neturi aiškaus datos tipo, todėl lengviau ir greičiau ją saugoti kaip int. Taip pat, kaip „Excel“ naudoja datas (dienas nuo 1900 m. Sausio 1 d.), Jų int reikšmės yra nuo 41446 iki 41455. Jei sudedate datas skaičiuoklėje, tada suformatuokite datos stulpelį kaip skaičių su 0 ženklų po kablelio, jis atrodo maždaug taip:

Dabar šiuos duomenis galėtume laikyti vienoje lentelėje ir tokiam paprastam pavyzdžiui greičiausiai tai būtų priimtina. Tačiau tam tikros duomenų bazių kūrimo praktikos reikia normalizavimas.

Unikalūs duomenų elementai, tokie kaip renginio vietos tipas, turėtų būti atskiroje lentelėje, o įvykių tipai (vakarėliai ir tt) taip pat turėtų būti vienoje. Galiausiai, kadangi keliose vietose gali būti įvairių tipų įvykių (santykiai nuo daugelio iki daugelio), norint juos surengti, reikia trečiosios lentelės.

Trys lentelės yra:

  • vietos - talpina visas penkias vietas
  • įvykio tipai - apima visus tris įvykių tipus
  • įvykiai - laiko datą, vietos ID ir įvykio tipo ID. Aš taip pat pridėjau šio įvykio aprašymo lauką, pvz., „Jim's Birthday“.

Pirmosiose dviejose lentelėse pateikiami duomenų tipai, todėl vietų pavadinimai turi atitikti alfa ženklus. Aš taip pat pridėjau sveikąjį ID ir sukūriau tam indeksą. Turint nedaug renginių vietų (5) ir renginių tipų (3), tai galima būtų padaryti be rodyklės, tačiau turint didesnes lenteles, tai bus labai lėtai. Taigi bet kuriame stulpelyje, kuriame greičiausiai bus ieškoma, pridėkite rodyklę, geriausia - sveikasis skaičius

SQL tai sukurti yra:

Įvykių lentelės rodyklėje nurodoma data, įvykio ID, įvykio tipas ir vieta. Tai reiškia, kad galime užklausti įvykių lentelės pagal „visus datos įvykius“, „visus renginio renginius vietoje“, „visus vakarėlius“ ir pan. Bei tokių derinius, kaip „visi vakarėliai renginio vietoje“ ir kt.

Paleidus SQL lentelės užklausų užklausą, sukuriamos trys lentelės. Pastaba Aš įdėjau visą tą sql į teksto failą create.sql ir jame yra duomenų apie kai kurių trijų lentelių užpildymą.

Jei įdėsite; eilučių gale, kaip tai padariau „create.sql“, tada galėsite rinkti ir vykdyti visas komandas vienu kartu. Be; jūs turite paleisti kiekvieną atskirai. SQLiteSpy tiesiog spustelėkite F9 ir paleiskite viską.

Aš taip pat įtraukiau „SQL“, kad visos trys lentelės būtų nuleistos į kelių eilučių komentarus naudojant / *.. * / tas pats, kaip C. Tiesiog pasirinkite tris eilutes ir paspauskite „Ctrl“ + F9, norėdami vykdyti pasirinktą tekstą.

Šios komandos įterpia penkias vietas:

Aš vėl įtraukiau komentarus į tuščias lenteles, naudodamas ištrinti iš linijos. Nėra anuliavimo, todėl būkite atsargūs su šiais!

Stebina tai, kad su visais įkeltais duomenimis (tiesa, ne per daug) visas duomenų bazės failas diske yra tik 7 KB.

Renginio duomenys

Užuot sukūręs daugybę dešimties įterpimo teiginių, „Excel“ sukūriau .csv failą įvykio duomenims naudoti ir tada importavimui naudojo „SQLite3“ komandų eilutės įrankį (pridedamą prie „SQLite“) ir šias komandas tai.

Pastaba: Bet kuri eilutė su taško (.) Priešdėliu yra komanda. Norėdami peržiūrėti visas komandas naudokite .help. Norėdami paleisti SQL, tiesiog įveskite jį be laikotarpio priešdėlio.

Kiekvieno aplanko importavimo kelyje turite naudoti dvigubus juodus brūkšnius \\. Atlikite paskutinę eilutę tik po to, kai .import pavyko. Kai „SQLite3“ paleidžia, numatytasis skirtukas yra: todėl prieš importavimą jį reikia pakeisti į kablelį.

Atgal į kodeksą

Dabar turime visiškai apgyvendintą duomenų bazę, rašykime C kodas paleisti šią SQL užklausą, kuri pateikia šalių sąrašą su aprašymu, datomis ir vietomis.

  • Nauji SQL? Perskaitykite Kas yra SQL?

Tarp įvykių ir vietų lentelės tai sujungiama naudojant „stulpelio“ stulpelį, taigi gauname vietos pavadinimą, o ne jos vidaus vertę.

„SQLite C“ API funkcijos

Yra daugybė funkcijų, bet mums reikia tik keleto. Apdorojimo tvarka yra tokia:

  1. Atidarykite duomenų bazę naudodami sqlite3_open (), išeikite, jei turite klaidą ją atidarant.
  2. Paruoškite SQL naudodami „sqlite3_prepare ()“
  3. Panaudokite slqite3_step (), kol daugiau įrašų nebus
  4. (Cikle) apdorokite kiekvieną stulpelį naudodami „sqlite3_column“ ...
  5. Galiausiai paskambinkite sqlite3_close (db)

Paskambinus į „sqlite3_prepare“, yra neprivalomas žingsnis, kai visi perduoti parametrai yra surišti, bet mes išsaugosime juos ateityje.

Taigi žemiau pateiktoje programoje pagrindinių žingsnių pseudo kodas yra:

„Sql“ pateikia tris reikšmes, taigi, jei „sqlite3.step () == SQLITE_ROW“, reikšmės nukopijuojamos iš atitinkamų stulpelių tipų. Aš naudojau int ir tekstą. Datą rodau kaip numerį, tačiau nedvejodami konvertuokite ją į datą.

Kodo pavyzdžių sąrašas