Baza danych w poważniejszych aplikacjach na Windows 8 to podstawa – niezależnie, czy budujemy małą aplikację do zapisywania obrazków czy dużą aplikacje działającą z Windows Azure, gdzie relacje między danymi to podstawa albo potrzebny nam Caching danych.
Ponieważ nie ma komponentów baz danych SQL CE, które można by dołączyć do naszych projektów w środowisku Windows Runtime, Microsoft wraz z ludźmi z SQLite przygotował nam alternatywę w postaci tego bardzo ciekawego i szybkiego systemu bazy danych. Napisany jest on w natywnym C++, skompilowany do środowiska WinRT i działa z każdą architekturą na którą programujemy. Ponieważ nie jest to zarządzany kod (Managed Code) to niestety musimy przygotowywać oddzielne paczki aplikacji – x86, x64 oraz ARM – na szczęście na tym nasz udział w kompilowaniu się kończy, ponieważ kompilator sam wybierze automatycznie wymaganą architekturę bazy danych (plik dll w wersjach x86, x64, ARM) i dołączy ją do paczki.
Instalacja paczki SQLite dla Windows Runtime
Pierwszą rzeczą, którą należy uczynić jest w ogóle ściągnięcie paczki z bazą danych. Można to zrobić z poziomu Visual Studio (we wszystkich edycjach). Z menu Tools (Narzędzia) wybieramy Extensions and Updates (Rozszerzenia i Aktualizacje), następnie wybieramy sekcję Online (po lewej stronie) i wpisujemy w wyszukiwarce w prawym górnym rogu “sqlite”. Wtedy ukaże się nam paczka: SQLite for Windows Runtime
Klikamy Download (Pobierz) i instalujemy ściągnięty plik. Po zainstalowaniu należy zrestartować Visual Studio o czym poinformuje program.
Używanie SQLite w projektach XAML/C# (VB)
Kiedy mamy już paczkę SQLite dla Windows Runtime, możemy jej użyć. W aplikacjach C#/VB należy poczynić parę kroków:
- Stwórz aplikację (np. pusta Aplikacja)
- Wywołaj opcję Add Reference (czyli dodaj referencje)
- Dodajemy Rozszerzenie (nie czyste dll) z kategorii Windows/Extensions SQLite for Windows Runtime wraz z C++ Runtime Package
Ponieważ biblioteka ta jest napisana w języku C++, najwygodniej jest ściągnąć tzw. wrapper, czyli zbiór klas/funkcji pomocniczych, które napisane są w C#/VB a wywołują funkcje C++. Najłatwiejszą biblioteką do wykorzystania w projektach jest sqlite-net jest ona skompilowana w języku C# i dostępna poprzez menager NuGet. Programiści VB niestety muszą sami skompilować tę bibliotekę i dodać ją do referencji projektu.
Aby pobrać do projektu bibliotekę sqlite-net:
- Przy włączonym projekcie, włączamy Package Manager Console (konsola menagera projektów) w Visual Studio
- Wpisujemy komendę: Install-Package sqlite-net
Po tej komendzie automatycznie powinny nam pojawić się 2 pliki: SQLiteAsync.cs oraz SQLite.cs.
Biblioteka ta pozwala na używanie składni jak w LINQ2SQL, gdzie encje w bazie danych można reprezentować za pomocą typów.
[csharp]
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
LoadData();
}
public void LoadData()
{
var dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, “db.sqlite”);
using (var db = new SQLite.SQLiteConnection(dbPath))
{
db.CreateTable();
db.RunInTransaction(() =>
{
db.Insert(new Person() { FirstName = “Tim”, LastName = “Heuer” });
db.Insert(new Person() { FirstName = “Michał”, LastName = “Walczak” });
});
}
}
}
public class Person
{
[SQLite.AutoIncrement, SQLite.PrimaryKey]
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
[/csharp]
Teraz jedynie należy wybrać architekturę aplikacji (x86, x64, ARM) – nie można zostawić AnyCPU. Pamiętajcie, że przygotowując paczkę do certyfikacji zawsze ustawiajcie je na “Release” w przeciwnym wypadku aplikacja nie przejdzie certyfikacji.
Używanie SQLite w projektach XAML/C++
Deweloperzy piszący w C++ muszą zainstalować paczkę i dodać ją do referencji. W projektach C++ nie ma czegoś takiego jak menu “Dodaj referencję” – trzeba manualnie wybrać References (Referencje), wtedy dopiero przycisk Add Reference (Dodaj Referencję) pojawia się. Aby zacząć korzystać z SQLite należy dodać include w pliku gdzie wykorzystujemy bazę: #include <sqlite3.h>
Nie trzeba korzystać z wraperów, ponieważ cała baza napisana jest w C++ i odnosimy się jedynie do czystych funkcji C++.
Używanie SQLite w projektach HTML5/Javascript
Aby korzystać z paczki SQLite w projektach Javascript należy podążać takimi samymi krokami jak w przypadku XAML/C#. Należy dodać referencje do rozszerzenia SQLite oraz C++ runtime. Aby korzystać z tej biblioteki należy pobrać odpowiedni wrapper. Zalecanym wrapperem jest SQLite3-WinRT. Wystarczy ściągnąć paczkę i dodać pliki do swojego projektu. Przykład kodu:
[javascript]
var dbPath = Windows.Storage.ApplicationData.current.localFolder.path + ‘\\db.sqlite’;
SQLite3JS.openAsync(dbPath)
.then(function (db) {
return db.runAsync(‘CREATE TABLE Item (name TEXT, price REAL, id INT PRIMARY KEY)’);
})
.then(function (db) {
return db.runAsync(‘INSERT INTO Item (name, price, id) VALUES (?, ?, ?)’, [‘Mango’, 4.6, 123]);
})
.then(function (db) {
return db.eachAsync(‘SELECT * FROM Item’, function (row) {
console.log(‘Get a ‘ + row.name + ‘ for $’ + row.price);
});
})
.then(function (db) {
db.close();
});
[/javascript]
Podsumowanie
SQLite to bardzo prosta w obsłudze, lecz zaawansowana baza danych – napisana jest w C++, działa na plikach lokalnych. Mam nadzieję, że artykuł ten przetłumaczony na język Polski (oryginał Tim Heuer) przybliży wam instalację i używanie bazy. W przyszłości umieszczę przykłady projektów z insertami, deletami, zasileniem źródeł danych. Jeżeli zauważycie jakiś błąd, piszcie w komentarzach 🙂
Uwaga! Testowane wersje SQLite (wraz z 3.7.13) posiadają dosyć irytujący błąd. Ponieważ SQLite wykorzystuje do zapisu przestrzeń lokalną (Local Storage), to korzysta ze ścieżki bezpośredniej (C:/Users/…/KatalogZDanymiAplikacji ). Jeżeli wasza nazwa użytkownika zawiera polskie litery lub litery z rozszerzonej tablicy ASCII jest bardzo prawdopodobne, że SQLite nie będzie w stanie stworzyć pliku bazy danych, ponieważ nie obsługuje w ścieżkach takich znaków. Jedynym obejściem tymczasowym jest stworzenie w Windows 8 konta lokalnego nie zawierającego w nazwie polskich znaków
Artykuł przetłumaczony według licencji autora.
Źródło: http://timheuer.com/blog/archive/2012/08/07/updated-how-to-using-sqlite-from-windows-store-apps.aspx