Tämä opetusohjelma on toinen sarjassa ohjelmointi SQLite julkaisussa C.
SQLite tallentaa taulukkokokoelman yhteen tiedostoon tietokanta, päättyy yleensä .db. Jokainen taulukko on kuin laskentataulukko, se koostuu useista sarakkeista ja jokaisella rivillä on arvoja.
Jos se auttaa, ajattele jokaista riviä olevan struct, kanssa taulukon sarakkeet jotka vastaavat rakenteen kenttiä.
Taulukossa voi olla niin monta riviä kuin levylle mahtuu. On yläraja, mutta sen valtava 18,446,744,073,709,551,616 ollakseni tarkka.
Taulukossa voi olla jopa 2 000 saraketta tai jos käännät lähteen uudelleen, voit maksimoida sen mahtavaksi 32 767 sarakkeeksi.
SQLite-sovellusliittymä
SQLiten käyttämiseksi meidän on soitettava sovellusliittymään. Löydät tämän sovellusliittymän johdannon virkamieheltä Johdatus SQLite C / C ++ -rajapintaan Nettisivu. Se on kokoelma toimintoja ja helppo käyttää.
Ensinnäkin tarvitsemme kahvan tietokantaan. Tämä on tyyppiä sqlite3 ja palautetaan puhelulla sqlite3_open (tiedostonimi, ** ppDB). Sen jälkeen suoritamme SQL.
Katsotaanpa ensin pieni poikkeama ja luodaan käyttökelpoinen tietokanta ja jotkut taulukot SQLiteSpy: n avulla. (Katso edellisen opetusohjelman linkit siihen ja SQLite-tietokantaselaimeen).
Tapahtumat ja paikat
Tietokanta. DB järjestää kolme taulukkoa tapahtumien hallitsemiseksi useilla tapahtumapaikoilla. Nämä tapahtumat ovat juhlia, diskoja ja konsertteja, ja ne järjestetään viidessä paikassa (alfa, beeta, charlie, delta ja kaiku). Kun mallinnat jotain tällaista, se auttaa usein aloittamaan laskentataulukon. Yksinkertaisuuden vuoksi tallennan vain päivämäärän, ei kellonajan.
Laskentataulukossa on kolme saraketta: Päivämäärät, Paikka, Tapahtumatyyppi ja noin kymmenen tällaista tapahtumaa. Päivämäärät alkavat 21.-30. Kesäkuuta 2013.
Nyt SQLite: llä ei ole nimenomaista päivämäärätyyppiä, joten on helpompaa ja nopeampaa tallentaa se int-muodossa ja samalla tavalla, kuin Excel käyttää päivämääriä (päivät 1. tammikuuta 1900 lähtien), joiden int-arvot ovat 41446 - 41455. Jos lisäät päivämäärät laskentataulukkoon, muotoile päivämäärän sarake numerona, jolla on 0 desimaalia, se näyttää noin:
Nyt voisimme tallentaa nämä tiedot yhteen taulukkoon ja tällaisen yksinkertaisen esimerkin tapauksessa se olisi todennäköisesti hyväksyttävä. Hyvä tietokannan suunnittelukäytäntö vaatii kuitenkin joitain normalisointi.
Ainutlaatuisten tietokohteiden, kuten tapahtumapaikan, tulisi olla omassa taulukossaan ja tapahtumatyyppien (juhlat jne.) Myös oltava yhdessä. Viimeinkin, koska meillä voi olla useita tapahtumatyyppejä useissa tapahtumapaikoissa (suhteet monilta monille), tarvitsemme kolmannen taulukon näiden pitämiseksi.
Kolme taulukkoa ovat:
- tapahtumapaikat - pitää kaikki viisi tapahtumapaikkaa
- tapahtumatyypit - sisältää kaikki kolme tapahtumatyyppiä
- tapahtumat - pitää päivämäärän, tapahtumapaikan tunnuksen ja tapahtumatyypin tunnuksen. Lisäsin myös kuvauskentän tälle tapahtumalle, esim. "Jimin syntymäpäivä".
Kahdessa ensimmäisessä taulukossa on tietotyypit, joten tapahtumapaikoilla on nimet alfa toistettavaksi. Olen myös lisännyt kokonaislukutunnuksen ja luonut siihen hakemiston. Pienillä tapahtumapaikoilla (5) ja tapahtumatyypeillä (3) se voitaisiin tehdä ilman hakemistoa, mutta suuremmilla taulukoilla se tulee hitaasti. Joten kaikki sarakkeet, joista todennäköisesti haetaan, lisää hakemisto, mieluiten kokonaisluku
SQL tämän luomiseksi on:
Tapahtumotaulukon hakemistossa on päivämäärä, id-tapahtuma, tapahtuman tyyppi ja paikka. Tämä tarkoittaa, että voimme kysyä tapahtumastaulukosta "kaikki päivämäärän tapahtumat", "kaikki tapahtumapaikan tapahtumat", "kaikki osapuolet" jne. Sekä niiden yhdistelmät, kuten "kaikki juhlat tapahtumapaikalla" jne.
Sen jälkeen kun SQL-luoda taulukkopyynnöt on suoritettu, kolme taulukkoa luodaan. Huomaa, että olen lisännyt kaiken tämän neliön tekstitiedostoon create.sql ja se sisältää tietoja joidenkin kolmen taulukon täyttämiseksi.
Jos laitat; rivien lopussa, kuten olen tehnyt osoitteessa create.sql, niin voit erotella ja suorittaa kaikki komennot yhdellä kertaa. Ilman; Jokainen sinun täytyy ajaa itse. Napsauta SQLiteSpy-sovelluksessa vain F9 suorittaaksesi kaiken.
Olen myös lisännyt sql: n pudottaaksesi kaikki kolme taulukkoa monirivisten kommenttien sisällä painikkeella / *.. * / sama kuin C: ssä. Valitse vain kolme riviä ja suorita valittu teksti valitsemalla ctrl + F9.
Nämä komennot lisäävät viisi tapahtumapaikkaa:
Olen jälleen lisännyt kommentoida tekstiä tyhjiin taulukoihin, poista linjat. Kumoamista ei ole, joten ole varovainen näiden suhteen!
Hämmästyttävää, kun kaikki ladatut tiedot (tosin ei paljon) levyllä oleva koko tietokantatiedosto on vain 7 kt.
Tapahtumatiedot
Sen sijaan, että rakentaisin joukko kymmenen lisäyslauseketta, luin Excelillä .csv-tiedoston tapahtumatiedoille ja sitten tuonut SQLite3-komentorivityökalun (joka tulee SQLiten mukana) ja seuraavien komentojen tuontiin se.
Huomaa: Mikä tahansa rivi, jolla on jakson (.) Etuliite, on komento. Käytä .help-painiketta kaikkien komentojen tarkastelemiseen. Suorita SQL kirjoittamalla se vain ilman etuliitettä.
Jokaisen kansion tuontipolussa on käytettävä kaksinkertaista mustaa viivaa \\. Tee viimeinen rivi vasta sen jälkeen, kun .import on onnistunut. Kun SQLite3 suorittaa, oletuserotin on: joten se on vaihdettava pilkkuun ennen tuontia.
Takaisin koodiin
Nyt meillä on täysin asuttu tietokanta, kirjoitetaan C-koodi suorittaa tämä SQL-kysely, joka palauttaa luettelon osapuolista, kuvauksen, päivämäärät ja paikat.
- Onko SQL uusi? Lue Mikä on SQL?
Tämä yhdistää tapahtumia ja tapahtumapaikkoja koskevan taulukon välisellä idvenue-sarakkeella, joten saamme tapahtumapaikan nimen, ei sen int idvenue -arvon.
SQLite C API -toiminnot
Toimintoja on monia, mutta tarvitsemme vain kourallisen. Käsittelyjärjestys on:
- Avaa tietokanta sqlite3_open (): lla, poistu, jos sinulla on virhe sen avaamisessa.
- Valmista SQL komennolla sqlite3_prepare ()
- Silmukkaa käyttämällä slqite3_step (), kunnes enempää tietueita
- (Silmukassa) prosessoi jokainen sarake sqlite3_column ...
- Soita lopuksi sqlite3_close (db)
Sqlite3_prepare-puhelun soittamisen jälkeen on valinnainen vaihe, johon kaikki parametrien läpimenot sidotaan, mutta tallennamme sen tulevaa opetusohjelmaa varten.
Joten alla luetellussa ohjelmassa pseudokoodi tärkeimmille vaiheille on:
Sql palauttaa kolme arvoa, joten jos sqlite3.step () == SQLITE_ROW, arvot kopioidaan asianmukaisista saraketyypeistä. Olen käyttänyt int ja tekstiä. Näytän päivämäärän numerona, mutta voit muuttaa sen päivämääräksi.
Luettelo esimerkkikoodista