Dołączanie SQLite do Aplikacji Windows 8

SQLite

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.

SQLite

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

Extensions and Updates - Wybór paczki SQLite dla WinRT

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:

  1. Stwórz aplikację (np. pusta Aplikacja)
  2. Wywołaj opcję Add Reference (czyli dodaj referencje)
  3. Dodajemy Rozszerzenie (nie czyste dll) z kategorii Windows/Extensions SQLite for Windows Runtime wraz z C++ Runtime Package

    Dodajemy Paczkę SQLite wraz z C++ do referencji

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:

  1. Przy włączonym projekcie, włączamy Package Manager Console (konsola menagera projektów) w Visual Studio
  2. Wpisujemy komendę: Install-Package sqlite-net

 Instalacja 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