W poprzedniej części artykułu nauczyliśmy się korzystać z SQL Managera, narzędzia służącego do zarządzania bazą danych SQLite.
W tej części artykułu opisze podstawowe operacje na bazie danych w języku C++.
Uprzednio stworzoną bazę danych BadaDev.sqlite umieszczamy w katalogu /Home naszej aplikacji.
Katalog ten jest przeznaczony na pliki z których aplikacja będzie korzystała podczas swojej pracy.
Aby korzystać z funkcji oferowanych przez bibliotekę SQLite, wymagane jest dołączenie pliku nagłówkowego FIo.h.
#include <FIo.h> // Połączenie z bazą danych Osp::Io::Database* db = null; db = new Osp::Io::Database(); result r = db->Construct(L"/Home/BadaDev.sqlite", false); if (IsFailed(r)) { AppLogException("Błąd połączenia"); // zakończ program/funkcję np. przez return jeśli jesteś w funkcji } else { AppLog("Połączenie nawiązano"); } // Wyświetlenie zawartości tabeli users Osp::Io::DbEnumerator* pEnum; Osp::Io::DbStatement* pStmt1; String query1(L"SELECT id, username FROM users"); pEnum = db->QueryN(query1); if (pEnum != null) { int id; String username; while(pEnum->MoveNext() == E_SUCCESS) { pEnum->GetIntAt(0, id); // pierwsza kolumna id pEnum->GetStringAt(1, username); // druga kolumna username AppLogDebug("Uzytkownik: %d, %S", id, username.GetPointer()); } delete pEnum; } // Zamknięcie połączenia if (db != null) { delete db; }
W oknie Output powinniśmy zobaczyć wszystkich użytkowników z tabeli users.
Ale jak wyświetlić użytkowników, którzy spełniają jakiś warunek?
Do zbudowania zapytania, które wymaga podania pewnych kryteriów wyszukiwania, powinniśmy posłużyć się funkcjami CreateStatementN() i ExecuteStatementN().
Aby wyświetlić użytkownika o id równym 1 należy linie 21-22 zastąpić następującym fragmentem:
pStmt1 = db->CreateStatementN(L"SELECT id, username FROM users WHERE id = ?"); pStmt1->BindInt(0, 1); // 0 oznacza indeks argumentu pEnum = db->ExecuteStatementN(*pStmt1);
Pozostałej części kodu nie musimy zmieniać, ale wiedząc, że każdy użytkownik posiada unikalne id, w wyniku zawsze zostanie zwrócony maksymalnie jeden rekord. Z tego też powodu z pętli while możemy zrezygnować na rzecz zwykłego if.
Tak naprawdę, ten sam wynik osiągnęlibyśmy modyfikując pierwszą wersję zapytania w linii 20. Przykład:
String query1(L"SELECT id, username FROM users WHERE id = "); query1.Append(1);
Nie mniej należy pamiętać, że w tym przypadku musimy bardzo uważać na poprawność zapytania, pamiętać o apostrofach dla wartości typu String itp., z tego też powodu nie polecam tej metody.
Artykuł pisałem z tzw. palca. Kod nie był kompilowany i testowany. Jeśli znajdziesz jakiś błąd, proszę o informację w komentarzu. Jeśli będzie zainteresowanie omawianym tematem, postaram się opisać dodatkowe operacje, takie jak aktualizacja i kasowanie rekordów.
Więcej informacji o korzystaniu z bazy danych znajdziesz w dokumentacji na bada.com.