Статьи

Android для Windows Phone 8: работа с базой данных SQL

В следующих нескольких статьях я покажу вам, как работать с локальными данными на платформе Windows Phone 8, и сравню их с работой с данными на платформе Android.

Бывают случаи, когда пары ключ-значение и / или файлы не удовлетворяют потребности в хранении данных. В частности, когда вы имеете дело со структурированными данными, которые повторяются, такими как события в календаре. Для этого типа информации вы захотите использовать реляционное хранилище. Это реляционное хранилище обычно является базой данных SQL. И Android, и Windows Phone 8 поддерживают использование механизма реляционных баз данных SQLite. В этом разделе предполагается, что вы знакомы с SQLite на Android.

Установка SQLite

Первое, что вам нужно сделать, это установить приложения SQLite для Windows Phone. Это можно сделать, загрузив пакет SQLite для Windows Phone.


  1. В Visual Studio откройте 
     меню «
    Сервис» и выберите « 
    Расширения и обновления».

  2. В дереве слева от окна «Расширения и обновления» нажмите « Онлайн» , затем щелкните «  Галерея Visual Studio» .
  3. Затем введите  sqlite  в поле поиска в верхнем правом углу и нажмите  Enter .

  4. Пакет 
    SQLite для Windows Phone  должен появиться. Нажмите
    Скачать .


  5. Вам будет предложено нажать 
    Установить . Сделай так.


  6. После установки пакета вам нужно будет перезапустить Visual Studio
ANDROID HINT
Пакет  SQLite для Windows  похож на  пакет android.database.sqlite .

Добавление ссылки на SQLite

Теперь, когда SQLite установлен, вам нужно добавить ссылку на него из вашего проекта.


  1. Щелкните правой кнопкой мыши 
    папку «
    Ссылки  » в проекте Windows Phone и выберите « 
    Добавить ссылку».

  2. В дереве в левой части окон диспетчера ссылок разверните   узлы Windows Phone  и  Extensions .

  3. Затем выберите 
    SQLite для Windows Phone  и нажмите « 
    ОК».


  4. Теперь вы должны увидеть расширение, появившееся в папке References для вашего проекта.

Получение вспомогательных классов

Последнее, что вам нужно сделать, — это получить несколько вспомогательных классов, которые немного упростят работу с SQLite. Существует ряд доступных для приложений Windows Phone. Те, которые я предпочитаю использовать, взяты из  библиотеки sqlite-net .

Библиотеку  sqlite-net  можно получить из NuGet с помощью следующих шагов

VISUAL STUDIO TIP
NuGet  — это бесплатный менеджер пакетов с открытым исходным кодом для .NET Framework.

  1. Щелкните правой кнопкой мыши 
    папку «
    Ссылки  » в своем проекте Windows Phone и выберите « 
    Управление пакетами NuGet»…

  2. Разверните   узел Online в левой части окна.
  3. Введите  sqlite  в поле поиска в верхней правой части окна и нажмите  Enter .

  4. Выберите 
    sqlite-net  и нажмите « 
    Установить» .


  5. В ваш проект будут добавлены два исходных файла: 
    SQLite.cs  и
    SQLiteAsync.cs .


  6. Если вы посмотрите в свой 
    список ошибок,  вы увидите ряд ошибок. Это связано с тем, что 
    sqlite-net  зависит от 
    csharp-sqlite,  который не был перенесен в 
    Windows Phone 8 .


  7. Чтобы обойти это, вам нужно использовать 
    родной проект C ++ sqlite-net-wp8 . Сначала вам нужно будет зайти в 
    репозиторий проекта на github  и скачать zip-версию репозитория.


  8. Щелкните правой кнопкой мыши загруженный zip-файл, выберите « 
    Свойства» , нажмите « 
    Разблокировать» и нажмите « 
    ОК» .

  9. Распакуйте содержимое.

  10. В обозревателе решений в Visual Studio щелкните правой кнопкой мыши решение и выберите « 
    Добавить» , затем выберите « 
    Существующий проект» .


  11. В диалоговом окне «Добавить существующий проект» перейдите к папке, в которую вы распаковали содержимое на шаге, выберите 
     файл
    Sqlite.vcxproj и нажмите «
    Открыть» .


  12. Теперь вы должны увидеть 
     проект
    Sqlite в своем решении.


  13. Теперь вам нужно добавить ссылку на 
     проект
    Sqlite в ваш проект Windows Phone. Щелкните правой кнопкой мыши 
     папку «
    Ссылки » вашего проекта Windows Phone и нажмите « 
    Добавить».

  14. В диалоговом окне «Диспетчер ссылок» выберите «  Решение»  в дереве слева и выберите «  Проекты».

  15. Установите флажок рядом с 
     проектом
    Sqlite и нажмите 
    ОК .


  16. Последний шаг — добавить директиву компилятора в проект Windows Phone.
    Щелкните правой кнопкой мыши проект Windows Phone в обозревателе решений и выберите 
    Свойства


  17. Нажмите 
    Build  и добавьте следующее в текстовое поле условных символов компиляции 
    :; USE_WP8_NATIVE_SQLITE


  18. Создайте свое решение, нажав 
    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);
    }