© 2013 All rights reserved.
6

Vývoj aplikací pro iPhone: použití SqLite v iPhone

Kam ukládat data v iPhone? Použití SqLite databáze v iPhone za využití jazyka Cocoa.

Pokud budete vyvíjet aplikace pro iPhone určitě narazíte na probém, kam s daty, které není možné uchovávavat v paměti aplikace.

Tohle je ideální případ pro využítí databáze. Samozřejmě iPhone umí s databází pracovat. Konkrétně používá SqLite.

Přidání databáze do iPhone

Jako prvni je nutne databazi vytvořit a přidat si ji do prostředí iPhone (do xCode).

Na iOS si spustíme si terminál a ideálně přejdeme do adresáře s projektem. Tady zadáme příkaz

čímž se nám vytvoří soubor data.sqlite, ve kterém bude uložena naše databáze.

Nyní máte otevřenou konzoli pro sqlite, takže nám nic nebrání si rovnou vytvořit nějakou tabulku, například tabulku s kontakty.
Napíšeme:

 


iphone sql

 

Stejně tak si můžeme do tabulky rovnou přidat nějaký záznam, aby nebyla prázdná:

 


iphone sql

 

Konzoli můžeme zavřít a přídáme si databází do našeho projektu. Stací pouhým přetažením do Resources, nebo přes Add – Exists file.

Tím databáze v projektu bude existovat a bude možné ji používat.

Přídání knihoven do projektu

Pro přístup k databázi budeme potřebovat přidat do projektu knihovnu pro sqlite3. To uděláme jednoduše pravým kliknutím na Frameworks a výběrem: Add – Existing Frameworks.

V nabídce vybereme libsqlite3.0.dylb

 


iphone sql

 

Dotaz na databázi

V současné době jsme ve stavu, kdy máme v projektu přidanou databázi a přidány správné knihovny, takže můžete vytvořit třídu, pro přístup k databázi.

Do projektu si přídáme novou třídu (Objective C class), čímž se nám vytvoří jeden .m a jeden .h soubor. Pojmenovat je můžeme například MySqlite.

Jako první si upravíme soubor MySqlite.h, tedy interface třídy, které bude dědit NSObject a prozatím nebude obsah žádnou metodu.

Navíc do hlavičkového souboru přidáme include sqlite:

A můžeme se přepnout do implementace (do m. souboru) ve kterém si vytvoříme tří metody.

Metoda Popis
– (sqlite3 *) getDBConnection bude vracek konexi k databázi
– (sqlite3_stmt *)makeSQL:(char *)sql provede sql dotaz a vratí statement
– (void)createEditableCopyOfDatabaseIfNeeded metoda zkontroluje, zda je soubor s databází editovatelný, případně tento stav ošetří.

Třetí metoda createEditableCopyOfDatabaseIfNeeded, není nijak extra důležitá, databáze bude většinou editovatelná, minimálně při simulování, ale nastat může.

Nejprve se přepněte se za řádek, kde začíná implementace třídy a vytvoříme si proměnnou s názvem souboru s databází, abychom jej nemuseli definovat znova v každé metodě:

A začneme rovnou s impmentací metody createEditableCopyOfDatabaseIfNeeded, kterou budeme volat před přístupem k databázi.

 

Metoda bude fungovat tak, že vytvoří novou instaci NSFileManageru, načte soubor s dabází a zjistí, jestli je možné do něj zapisovat. V případě že ne, pokusí se jej zkopírovat na jíné misto, aby k němu měla aplikace přístup:

Máme ošetřený případ, že soubor s databází nejde otevřít, takže můžeme navázat konexi k databázi. Metoda getDBConnection načte soubor s databází a vrátí připojení:

Jako poslední nám zbývá metoda pro provedení sql dotazu. Metoda bude samozřejmě obsažena v interface, takže si upravíme interface v hlavičkovém souboru:

Funkce makeSQL bude volat getDBConnection, která ji vrátí připojení k databázi a vykoná sql dotaz, který bude jako vstupní parametr metody:

Návratová hodnota metody je sqlite3_stmt, se kterým můžeme dále pracovat.

Ještě jednou si můžeme uvést celý kód m souboru:

Použití v kódu

Použití v kódu je nyní jednoduché, vytvoříme si instanci třídy MySqlite a voláme metodu makeSql, která nám vrátí výsledek dotazu, můžeme si napsat funkci (void) LoadContacts, která nám vrátí všechny kontakty z tabulky contacts:

Závěrem

Práce s databází v iPhone se možná zdá na první pohled složitá, ale opak je pravdou. Nakonec je to asi jediná možnost jak uchovávvat v aplikaci velké množství dat.

Comments are closed for this page

Chtěl jsem si pořídit MAC Mini abych se mohl začít učit vývoj APP pro iOS, ale když vidím tu šílenou syntax tak si to asi ještě rozmyslím.

Je kvalitní alespoň IDE pro vývoj, ulehčuje práci programátorovi tím, že našeptává metody, doplňuje syntaxu a správně upozorňuje na možné chyby atd..

Děkuji

IDE je docela fajn, i kdyz me, jako uzivateli Windows docela dlouho trvalo, nez jsem si na nej zvyknul prave kvuli iOS.
Intellisense v xCode funguje vcelku spolehlive a programovani urcite hodne ulehcuje. Celej xCode je vcelku pouzitelny IDE, obsahuje temer vsechno co potrebuju, od jednoduchyho debugovani aplikaci az po simulovani na iPhone, nebo treba na iPadu.
Interface Builder pro vytvoreni rozhrani je taky vcelku pouzitelny.

"Nakonec je to asi jediná možnost jak uchovávvat v aplikaci velké množství dat."
A co CoreData?

CoreData je framework, ktery praci s daty usnadnuje, pouziva sice i jene uloziste, ale stejne tak i sqlite.

CoreData je mnohem vic nez je framework nad sqlite a urcite nez pouzivat ciste sqlite, je vhodnejsi pouzit neco jako FMDB nebo naky jiny framework, ktery pracuje nad sqlite

Ano, presne to jsem napsal, CoreData umoznuje praci s ruznymy datovymi ulozisti, nicmene, tenhle clanek je pouze o sqlite a jeho zakladnim pouziti.

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836