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.