Статьи

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

Узнайте, как писать код в приложениях Магазина Windows для Windows 8, которые работают со структурированными данными в  SQLite — популярной базе данных, знакомой разработчикам приложений для Android.

Вашему приложению может потребоваться работа с данными, которые являются более сложными, чем простые пары ключ-значение — например, сложный заказ на продажу или опрос с комментариями. Для данных такого типа вы можете использовать базу данных. Одним из популярных вариантов является SQLite — автономное ядро ​​реляционной транзакционной базы данных с нулевой конфигурацией, которое поддерживаются приложениями Android и Windows Store.

Вот как это сделать:

  • Установите SQLite.
  • Ссылка на это из приложения Магазина Windows.
  • Получите вспомогательную библиотеку, чтобы упростить кодирование.
  • Напишите код для создания таблицы базы данных.
  • Добавить, получить, изменить и удалить записи таблицы.

Установка SQLite

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


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

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


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


  6. После установки пакета вам нужно будет перезапустить Visual Studio
Android-совет
Пакет среды выполнения SQLite для Windows в Visual Studio аналогичен пакету android.database.sqlite.

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

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


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

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

  3. Затем выберите 
    SQLite для Windows Runtime  и
    Microsoft Visual C ++ Runtime Package  и нажмите 
    OK.


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

Совет по Visual Studio
После добавления этих ссылок проект вашего приложения не может быть собран или запущен. Чтобы это исправить, в   меню « Сборка» выберите «  Диспетчер конфигурации» . В поле  Платформа активного решения  выберите конкретную целевую платформу, например  ARMx64 или  x86 . Затем нажмите  Закрыть .

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

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

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


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

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

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


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

  6. Создайте свой проект, нажав  F6,  чтобы убедиться, что он настроен правильно.
Совет по Visual Studio
NuGet — это расширение Visual Studio, которое упрощает установку и обновление сторонних библиотек и инструментов в Visual Studio. Чтобы узнать больше о NuGet, см.  Галерею NuGet. После знакомства с NuGet вам может оказаться проще использовать версию NuGet для командной строки. Чтобы перейти к нему в Visual Studio, в   меню Сервис выберите  Диспетчер пакетов библиотеки  >  Консоль диспетчера пакетов .

Использование SQLite

В последней части этого раздела мы рассмотрим, как выполнять некоторые базовые задачи с SQLite в приложении Windows Store.

Создание таблицы

Первый шаг, который вам нужно сделать, — создать таблицу, которую будет использовать ваше приложение. Например, предположим, что ваше приложение хранит записи блога в таблице 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-совет
В приложениях для 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<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-совет
В приложениях Android вы можете вернуть   объект Cursor, содержащий одну запись с таким кодом.
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 Task<List<Post>> GetPosts()
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");

    var query = conn.Table<Post>();
    var result = await query.ToListAsync();

    return result;
}

Android-совет
В приложениях для 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 void UpdatePost(Post post)
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection("blog");
    await conn.UpdateAsync(post);
}

Android-совет
В приложениях для 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-совет
В приложениях для Android вы можете удалить запись с таким кодом.

public void deletePost(SQLiteDatabase db, Integer id ) {    
 String selection = "Id LIKE ?";
 String[] selelectionArgs = { String.valueOf(id) };
 db.delete("Post", selection, selectionArgs);
}

Следующие шаги

Чтобы узнать больше о том, как работать с SQLite, посмотрите эти ресурсы.