В следующих нескольких статьях я покажу вам, как работать с локальными данными на платформе Windows Phone 8, и сравню их с работой с данными на платформе Android.
Бывают случаи, когда пары ключ-значение и / или файлы не удовлетворяют потребности в хранении данных. В частности, когда вы имеете дело со структурированными данными, которые повторяются, такими как события в календаре. Для этого типа информации вы захотите использовать реляционное хранилище. Это реляционное хранилище обычно является базой данных SQL. И Android, и Windows Phone 8 поддерживают использование механизма реляционных баз данных SQLite. В этом разделе предполагается, что вы знакомы с SQLite на Android.
Установка SQLite
Первое, что вам нужно сделать, это установить приложения SQLite для Windows Phone. Это можно сделать, загрузив пакет SQLite для Windows Phone.
-
В Visual Studio откройте
меню « Сервис» и выберите «
Расширения и обновления». - В дереве слева от окна «Расширения и обновления» нажмите « Онлайн» , затем щелкните « Галерея Visual Studio» .
- Затем введите sqlite в поле поиска в верхнем правом углу и нажмите Enter .
-
Пакет
SQLite для Windows Phone должен появиться. Нажмите
Скачать .
-
Вам будет предложено нажать
Установить . Сделай так.
-
После установки пакета вам нужно будет перезапустить Visual Studio
ANDROID HINT |
Пакет SQLite для Windows похож на пакет android.database.sqlite . |
Добавление ссылки на SQLite
Теперь, когда SQLite установлен, вам нужно добавить ссылку на него из вашего проекта.
-
Щелкните правой кнопкой мыши
папку « Ссылки » в проекте Windows Phone и выберите «
Добавить ссылку». - В дереве в левой части окон диспетчера ссылок разверните узлы Windows Phone и Extensions .
-
Затем выберите
SQLite для Windows Phone и нажмите «
ОК». -
Теперь вы должны увидеть расширение, появившееся в папке References для вашего проекта.
Получение вспомогательных классов
Последнее, что вам нужно сделать, — это получить несколько вспомогательных классов, которые немного упростят работу с SQLite. Существует ряд доступных для приложений Windows Phone. Те, которые я предпочитаю использовать, взяты из библиотеки sqlite-net .
Библиотеку sqlite-net можно получить из NuGet с помощью следующих шагов
VISUAL STUDIO TIP |
NuGet — это бесплатный менеджер пакетов с открытым исходным кодом для .NET Framework. |
-
Щелкните правой кнопкой мыши
папку « Ссылки » в своем проекте Windows Phone и выберите «
Управление пакетами NuGet»… - Разверните узел Online в левой части окна.
- Введите sqlite в поле поиска в верхней правой части окна и нажмите Enter .
-
Выберите
sqlite-net и нажмите «
Установить» .
-
В ваш проект будут добавлены два исходных файла:
SQLite.cs и
SQLiteAsync.cs .
-
Если вы посмотрите в свой
список ошибок, вы увидите ряд ошибок. Это связано с тем, что
sqlite-net зависит от
csharp-sqlite, который не был перенесен в
Windows Phone 8 .
-
Чтобы обойти это, вам нужно использовать
родной проект C ++ sqlite-net-wp8 . Сначала вам нужно будет зайти в
репозиторий проекта на github и скачать zip-версию репозитория.
-
Щелкните правой кнопкой мыши загруженный zip-файл, выберите «
Свойства» , нажмите «
Разблокировать» и нажмите «
ОК» .
- Распакуйте содержимое.
-
В обозревателе решений в Visual Studio щелкните правой кнопкой мыши решение и выберите «
Добавить» , затем выберите «
Существующий проект» .
-
В диалоговом окне «Добавить существующий проект» перейдите к папке, в которую вы распаковали содержимое на шаге, выберите
файл Sqlite.vcxproj и нажмите «
Открыть» .
-
Теперь вы должны увидеть
проект Sqlite в своем решении.
-
Теперь вам нужно добавить ссылку на
проект Sqlite в ваш проект Windows Phone. Щелкните правой кнопкой мыши
папку « Ссылки » вашего проекта Windows Phone и нажмите «
Добавить». - В диалоговом окне «Диспетчер ссылок» выберите « Решение» в дереве слева и выберите « Проекты».
-
Установите флажок рядом с
проектом Sqlite и нажмите
ОК .
-
Последний шаг — добавить директиву компилятора в проект Windows Phone. Щелкните правой кнопкой мыши проект Windows Phone в обозревателе решений и выберите
Свойства -
Нажмите
Build и добавьте следующее в текстовое поле условных символов компиляции
:; USE_WP8_NATIVE_SQLITE -
Создайте свое решение, нажав
F6 . Теперь вы должны увидеть сообщение «Успешная сборка» и никаких ошибок в списке ошибок.
Использование SQLite
В последней части этого раздела мы рассмотрим, как выполнять некоторые основные задачи с SQLite в приложении Windows Phone.
Создание таблицы
Первый шаг, который вам нужно сделать, — создать таблицу, которую будет использовать ваше приложение. Например, предположим, что ваше приложение хранит записи блога в таблице SQLite. Используя пакет sqlite-net , полученный вами в предыдущем разделе, вы можете определить таблицу, просто написав класс.
public class Post { [PrimaryKey] public int Id { get; set; } public string Title { get; set; } public string Text { get; set; } }
В PrimaryKey атрибуты приходят из SQLITE-нетто пакета. Пакет предоставляет ряд атрибутов, которые позволяют вам определять схему таблицы.
Как только таблица определена, ее нужно создать, что можно сделать так:
private async void CreateTable() { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog"); await conn.CreateTableAsync<Post>(); }
Параметр «blog» в конструкторе для класса SQLiteAsyncConnection просто указывает путь к базе данных SQLite.
Тип Post, указанный в вызове метода CreateTableAsync, указывает тип таблицы, которая должна быть создана. Это сопоставляется с классом Post, созданным ранее.
Android-совет В Android вы должны создать таблицу, которая расширяет класс SQLiteOpenHelper, который содержит следующий метод: public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE Post ( Id INTEGER PRIMARY KEY, Title TEXT, Text TEXT )"); }
Вставка записи
Теперь, когда таблица создана, к ней можно добавить записи с помощью следующего кода:
public async void InsertPost(Post post) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog"); await conn.InsertAsync(post); }
ANDROID HINT В Android вы можете вставить запись со следующим кодом: public void insertPost(SQLiteDatabase db, String title, String text ) { ContentValues values = new ContentValues(); values.put("Title", title); values.put("Text", text); long newRowId; newRowId = db.insert("Post", null, values); }
Получение записей
Получить все записи из таблицы с помощью следующего:
public async Task<List<Post>> GetPosts() { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog"); var query = conn.Table<Post>(); var result = await query.ToListAsync(); return result; }
ANDROID HINT В Android вы можете вернуть объект Cursor, содержащий все записи, используя следующее: public Cursor getPosts(SQLiteDatabase db){ String[] projection = {"Id", "Title", "Text" }; Cursor c = db.query("Post", projection, null, null, null, null, null); return c; }
Получить одну запись из таблицы со следующим:
public async Task<Post> GetPost(int id) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog"); var query = conn.Table<Post>().Where(x => x.Id == id); var result = await query.ToListAsync(); return result.FirstOrDefault(); }
ANDROID HINT Следующее извлечет одну запись в Android: public Cursor getPost(SQLiteDatabase db, Integer id){ String[] projection = {"Id", "Title", "Text" }; String selection = "Id LIKE ?"; String[] selelectionArgs = { String.valueOf(id) }; Cursor c = db.query( "Post", projection, selection, selectionArgs, null, null, null); return c; }
Обновление записи
Для обновления записи требуется следующий код:
public async void UpdatePost(Post post) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog"); await conn.UpdateAsync(post); }
ANDROID HINT В Android вы можете обновить запись следующим кодом: public void updatePost(SQLiteDatabase db, Integer id, String title, String text ) { ContentValues values = new ContentValues(); values.put("Title", title); values.put("Text", text); String selection = "Id LIKE ?"; String[] selelectionArgs = { String.valueOf(id) }; int count = db.update("Post, values, selection, selectionArgs); }
Удаление записи
Запись может быть удалена с помощью следующего:
public async void DeletePost(Post post) { SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog"); await conn.DeleteAsync(post); }
ANDROID HINT В Android вы можете удалить запись с помощью следующего кода: public void deletePost(SQLiteDatabase db, Integer id ) { String selection = "Id LIKE ?"; String[] selelectionArgs = { String.valueOf(id) }; db.delete("Post", selection, selectionArgs); }