Bagikan melalui


Menggunakan database SQLite di aplikasi UWP

Anda dapat menggunakan SQLite untuk menyimpan dan mengambil data dalam database ringan di perangkat pengguna. Panduan ini menunjukkan caranya.

Beberapa manfaat menggunakan SQLite untuk penyimpanan lokal

✔️ SQLite ringan dan mandiri. Ini adalah pustaka kode tanpa dependensi lain. Tidak ada yang perlu dikonfigurasi.

✔️ Tidak ada server database. Klien dan server berjalan dalam proses yang sama.

✔️ SQLite berada di domain publik sehingga Anda dapat dengan bebas menggunakan dan mendistribusikannya dengan aplikasi Anda.

✔️ SQLite berfungsi di seluruh platform dan arsitektur.

Anda dapat membaca selengkapnya tentang SQLite di sini.

Pilih lapisan abstraksi

Kami menyarankan agar Anda menggunakan Entity Framework Core atau pustaka SQLite sumber terbuka dibuat oleh Microsoft.

Inti Kerangka Kerja Entitas

Entity Framework (EF) adalah pemeta relasional objek yang dapat Anda gunakan untuk bekerja dengan data relasional dengan menggunakan objek khusus domain. Jika Anda telah menggunakan kerangka kerja ini untuk bekerja dengan data di aplikasi .NET lainnya, Anda dapat memigrasikan kode tersebut ke aplikasi UWP dan akan berfungsi dengan perubahan yang sesuai pada string koneksi.

Untuk mencobanya, lihat Memulai dengan EF Core.

Pustaka SQLite

Pustaka Microsoft.Data.Sqlite mengimplementasikan antarmuka di namespace System.Data.Common. Microsoft secara aktif mempertahankan implementasi ini, dan mereka menyediakan pembungkus intuitif di sekitar SQLite API asli tingkat rendah.

Sisa panduan ini membantu Anda menggunakan pustaka ini.

Menyiapkan solusi Anda untuk menggunakan pustaka Microsoft.Data.SQlite

Kita akan mulai dengan proyek UWP dasar, lalu menginstal paket Nuget yang sesuai.

Nota

Pastikan Anda menginstal Microsoft.Data.Sqlite' package and not 'Microsoft.Data.Sqlite.Core. Paket ini akan menginstal Microsoft.Data.Sqlite.Core sebagai dependensi.

Semua versi Windows yang didukung mendukung SQLite, sehingga aplikasi Anda tidak perlu mengemas pustaka SQLite. Sebagai gantinya, aplikasi Anda dapat menggunakan versi SQLite yang diinstal dengan Windows. Ini membantu Anda dalam beberapa cara.

✔️ Mengurangi ukuran aplikasi Anda karena Anda tidak perlu mengunduh biner SQLite, lalu mengemasnya sebagai bagian dari aplikasi Anda.

✔️ Mencegah kebutuhan Anda untuk memperbarui versi terbaru dari aplikasi Anda kepada pengguna jika SQLite menerbitkan perbaikan penting pada bug dan kerentanan keamanan dalam SQLite. Versi Windows SQLite dikelola oleh Microsoft dalam koordinasi dengan SQLite.org.

✔️ Waktu pemuatan aplikasi berpotensi lebih cepat karena kemungkinan besar, versi SDK SQLite sudah akan dimuat ke dalam memori.

Mari kita mulai dengan menambahkan kelas ke proyek UWP Anda bernama DataAccess. Anda dapat menggunakan proyek pustaka kelas .NET Standard untuk berisi kode akses data Anda, tetapi kami tidak akan menggunakannya dalam contoh kami.

Klik kanan solusi, lalu klik Kelola Paket NuGet untuk Solusi.

Cuplikan layar lain dari panel Penjelajah Solusi dengan proyek diklik kanan dan opsi Kelola Paket NuGet disorot.

Pada titik ini, Anda memiliki pilihan. Anda dapat menggunakan versi SQLite yang disertakan dengan Windows atau jika Anda memiliki alasan untuk menggunakan versi SQLite tertentu, Anda dapat menyertakan pustaka SQLite dalam paket Anda. Kita akan menggunakan versi SQLite yang disertakan dengan Windows.

Pilih tab Telusuri, cari paket Microsoft.Data.SQLite.Core, lalu instal versi stabil terbaru.

paket SQLite Core

Menambahkan dan mengambil data dalam database SQLite

Kami akan melakukan hal-hal ini:

1️⃣ Siapkan kelas akses data.

2️⃣ Inisialisasi database SQLite.

3️⃣ Sisipkan data ke dalam database SQLite.

4️⃣ Mengambil data dari database SQLite.

5️⃣ Tambahkan antarmuka pengguna dasar.

Menyiapkan kelas akses data

Buka kelas DataAccess di proyek Anda dan buat kelas itu statis.

Nota

Meskipun contoh kami akan menempatkan kode akses data di kelas statis, ini hanyalah pilihan desain dan sepenuhnya opsional.

public static class DataAccess
{

}

Tambahkan pernyataan penggunaan berikut ke bagian atas file ini.

using Microsoft.Data.Sqlite;
using System.Collections.Generic;

Menginisialisasi database SQLite

Tambahkan metode ke kelas DataAccess yang menginisialisasi database SQLite.

public async static void InitializeDatabase()
{ 
     await ApplicationData.Current.LocalFolder.CreateFileAsync("sqliteSample.db", CreationCollisionOption.OpenIfExists);
     string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
     using (SqliteConnection db =
        new SqliteConnection($"Filename={dbpath}"))
    {
        db.Open();

        String tableCommand = "CREATE TABLE IF NOT " +
            "EXISTS MyTable (Primary_Key INTEGER PRIMARY KEY, " +
            "Text_Entry NVARCHAR(2048) NULL)";

        SqliteCommand createTable = new SqliteCommand(tableCommand, db);

        createTable.ExecuteReader();
    }
}

Kode ini membuat database SQLite dan menyimpannya di penyimpanan data lokal aplikasi.

Dalam contoh ini, kami memberi nama database tetapi Anda dapat menggunakan nama apa pun yang Anda inginkan selama Anda menggunakan nama tersebut di semua objek SqliteConnection yang Anda buat instans.

Di konstruktor file App.xaml.cs proyek UWP Anda, panggil metod InitializeDatabase kelas DataAccess.

public App()
{
    this.InitializeComponent();
    this.Suspending += OnSuspending;

    DataAccess.InitializeDatabase();
}

Menyisipkan data ke dalam database SQLite

Tambahkan metode ke kelas DataAccess yang menyisipkan data ke dalam database SQLite. Kode ini menggunakan parameter dalam kueri untuk mencegah serangan injeksi SQL.

public static void AddData(string inputText)
{
    string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
    using (SqliteConnection db =
      new SqliteConnection($"Filename={dbpath}"))
    {
        SQLitePCL.Batteries.Init();
        db.Open();

        SqliteCommand insertCommand = new SqliteCommand();
        insertCommand.Connection = db;

        // Use parameterized query to prevent SQL injection attacks
        insertCommand.CommandText = "INSERT INTO MyTable VALUES (NULL, @Entry);";
        insertCommand.Parameters.AddWithValue("@Entry", inputText);

        insertCommand.ExecuteReader();
    }

}

Mengambil data dari database SQLite

Tambahkan metode yang mendapatkan baris data dari database SQLite.

public static List<String> GetData()
{
    List<String> entries = new List<string>();

   string dbpath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sqliteSample.db");
   using (SqliteConnection db =
      new SqliteConnection($"Filename={dbpath}"))
    {
        db.Open();

        SqliteCommand selectCommand = new SqliteCommand
            ("SELECT Text_Entry from MyTable", db);

        SqliteDataReader query = selectCommand.ExecuteReader();

        while (query.Read())
        {
            entries.Add(query.GetString(0));
        }
    }

    return entries;
}

Metode Baca maju melalui baris data yang dikembalikan. Ini mengembalikan true jika ada baris yang tersisa, jika tidak, maka mengembalikan false.

Metode GetString mengembalikan nilai kolom yang ditentukan sebagai string. Ini menerima nilai bilangan bulat yang mewakili ordinal kolom berbasis nol dari data yang Anda inginkan. Anda dapat menggunakan metode serupa seperti GetDataTime dan GetBoolean. Pilih metode berdasarkan jenis data apa yang dikandung kolom.

Parameter ordinal tidak sepenting dalam contoh ini karena kita memilih semua entri dalam satu kolom. Namun, jika beberapa kolom adalah bagian dari kueri Anda, gunakan nilai ordinal untuk mendapatkan kolom tempat Anda ingin menarik data.

Menambahkan antarmuka pengguna dasar

Dalam file MainPage.xaml dari proyek UWP, tambahkan XAML berikut.

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel>
        <TextBox Name="Input_Box"></TextBox>
        <Button Click="AddData">Add</Button>
        <ListView Name="Output">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}"/>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackPanel>
</Grid>

Antarmuka pengguna dasar ini memberi pengguna TextBox yang dapat mereka gunakan untuk mengetik string yang akan kita tambahkan ke database SQLite. Kami akan menyambungkan Button di UI ini ke penanganan aktivitas yang akan mengambil data dari database SQLite lalu menampilkan data tersebut di ListView.

Dalam file MainPage.xaml.cs, tambahkan handler berikut. Ini adalah metode yang kami kaitkan dengan peristiwa Click dari Button di antarmuka pengguna (UI).

private void AddData(object sender, RoutedEventArgs e)
{
    DataAccess.AddData(Input_Box.Text);

    Output.ItemsSource = DataAccess.GetData();
}

Kami juga ingin memastikan bahwa data yang ada dimuat saat aplikasi dimulai. Tambahkan baris kode ke konstruktor MainPage untuk memanggil GetData().

public MainPage()
{
    this.InitializeComponent();

    Output.ItemsSource = DataAccess.GetData();
}

Itu saja. Jelajahi Microsoft.Data.Sqlite untuk melihat hal lain yang dapat Anda lakukan dengan database SQLite Anda. Lihat tautan di bawah ini untuk mempelajari cara lain menggunakan data di aplikasi UWP Anda.

Langkah berikutnya

Menyambungkan aplikasi Anda langsung ke database SQL Server

Lihat Menggunakan database SQL Server di aplikasi UWP.

Berbagi kode antara aplikasi yang berbeda di berbagai platform

Lihat Berbagi kode antara desktop UWP dan.

Menambahkan halaman master-detail menggunakan back end Azure SQL

Lihat sampel Database Pesanan Pelanggan .