SQLite тепер для мобільних додатків на С # під будь-яку платформу

    image
 
Зовсім недавно вийшла нова версія бібліотеки, яка буде корисна С # розробникам, які розробляють або планують розробляти Кросплатформені мобільні додатки.
 
 SQLitePCL може бути використана для реалізації локальної бази даних в додатках для Windows, Windows Store, Windows Phone, Android (Xamarin ) і iOS (Xamarin ). Вона безкоштовна і її код відкритий для всіх бажаючих.
 
Я перевірила її в дії, чим і хочу з вами поділитися.
 
 

Створюємо проект

Для експериментів нам знадобиться проект універсального програми для Windows і Phone.
 
 image
 
І проекти Xamarin для Android і iOS додатків.
 
 image
 
 

Підключаємо необхідні бібліотеки

Для кожного проекту встановлюємо і додаємо в References пакет SQLite-net PCL . Він автоматично встановить і SQLitePCL.raw . Це все, що нам треба буде для використання.
 
 image
 
 

Створюємо базу даних і реалізуємо CRUD операції

Ми реалізовуватимемо логіку роботи з даними у вже наявному у нас, загальному для всіх додатків, Shared проекті. Але ви можете робити це і в новій, створеній для цих цілей Portable Class Library .
 
Отже, додамо в Shared проект два файли. Один з них MessageItem.cs — буде містити структуру об'єкта, який ми будемо зберігати в базі даних, другий DataBase.cs — реалізовувати взаємодію з БД SQLite.
 
 image
 
 Код MessageItem.cs
using SQLite;
using System;
using System.Collections.Generic;
using System.Text;

namespace CrossplatformApp
{
    public class MessageItem
    {
        [PrimaryKey, AutoIncrement]
        public Guid Id { get; set; }
        public string Text { get; set; }
        public string User { get; set; }
        public string Created { get; set; }
    }
}

 
 Код DataBase.cs
using System;
using System.Collections.Generic;
using System.Text;
using SQLitePCL;
using System.Threading.Tasks;
using System.Linq;
using System.IO;
using SQLite;

namespace CrossplatformApp
{
    public class Database
    {
        private const string _db = "CrossplatformApp.db";
        private SQLiteConnection _connection = null;

        public Database(string path)
        {   
            string _dbpath = Path.Combine(path, _db);

            _connection = new SQLiteConnection(_dbpath);
            _connection.CreateTable<MessageItem>();
         
        }       
        ~Database()
        {
            if(_connection!=null)
                _connection.Close();
        }
       
        public int AddNewItem(MessageItem item)
        {
            var result = _connection.Insert(item);
            return result;
        }

        public int UpdateItem(MessageItem item)
        {
            var result = _connection.Update(item);
            return result;
        }

        public int DeleteItem(MessageItem item)
        {
            var result = _connection.Delete(item);
            return result;
        }

        public IQueryable<MessageItem> GetAllItems()
        {
            var result = _connection.Table<MessageItem>().OrderByDescending(t => t.Created);
            return result.AsQueryable<MessageItem>();
        }
    }
}

 
 

Використовуємо для W8, WP, iOS, Android

Подивимося, як буде працювати наша БД на Windows Phone.
 
Перейдемо в проект Windows Phone додатки і допрацюємо основну сторінку.
 
1. Замінимо весь XAML код в MainPage.xaml, щоб зробити простий інтерфейс програми і відображати дані з бази користувачеві.
 
 image
 
 MainPage.xaml
<Page
    x:Class="CrossplatformApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:CrossplatformApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    
    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="100*"/>
            <RowDefinition Height="567*"/>
        </Grid.RowDefinitions>

        <ListView x:Name="SampleListView" ItemsSource="{Binding}" Grid.RowSpan="2" Grid.Row="1" Margin="20,20,20,0" >
            <ListView.ItemTemplate>
            <DataTemplate>
                <Grid Grid.Column="1" Margin="10,0,0,0">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <TextBlock HorizontalAlignment="Left" 
                               Text="{Binding User}" 
                               VerticalAlignment="Top" 
                               Margin="0,0,0,-0.167" 
                               Style="{StaticResource ListViewItemTextBlockStyle}"/>
                    <TextBlock HorizontalAlignment="Left" 
                               TextWrapping="Wrap" 
                               Text="{Binding Text}" 
                               VerticalAlignment="Top" 
                               Margin="0" 
                               Grid.Row="1" 
                               Style="{StaticResource ListViewItemSubheaderTextBlockStyle}"/>
                </Grid>
            </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="SQLite PCL" VerticalAlignment="Bottom" FontSize="48" FontFamily="Global User Interface" Margin="20,0,0,0"/>

    </Grid>
</Page>

 
2. Напишемо код програми. Створимо БД, наповнимо даними і виведемо їх на екран.
 
 image
 
 MainPage.xaml.cs
Database db = new Database(ApplicationData.Current.LocalFolder.Path);
            
db.AddNewItem(new MessageItem { Id = Guid.NewGuid(), Text = "bla-bla", User = "@MissUFO", Created = DateTime.UtcNow.ToString() });

var messages = db.GetAllItems();

SampleListView.DataContext = messages;

 
3. Запустимо проект і подивимося на результат. БД створилася успішно, дані записуються і читаються.
 
 image
 
Для Android і iOS процедура виглядає в точності так само. Ви можете підключити Shared проект як References і користуватися нашими класами.
 
 image
 
 

Висновок

Свіжа версія бібліотеки SQLitePCL вийшла тільки-тільки, тому, якщо що не так, дивіться документацію і пишіть свої проблеми і питання на codeplex її авторам.
 
 

Корисні посилання

 Завантажити SQLitePCL
 Читати документацію по SQLite
 Завантажити Visual Studio 2013 Update 2
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.