Menyimpan data dalam database SQLite.NET lokal
Dalam mulai cepat ini, Anda akan mempelajari cara:
- Simpan data secara lokal dalam database SQLite.NET.
Mulai cepat menjelaskan cara menyimpan data dalam database SQLite.NET lokal, dari Xamarin.Forms aplikasi Shell. Aplikasi akhir ditunjukkan di bawah ini:
Prasyarat
Anda harus berhasil menyelesaikan mulai cepat sebelumnya sebelum mencoba mulai cepat ini.
Memperbarui aplikasi dengan Visual Studio
Luncurkan Visual Studio dan buka solusi Catatan.
Di Penjelajah Solusi, klik kanan solusi Catatan dan pilih Kelola Paket NuGet untuk Solusi...:
Di Manajer Paket NuGet, pilih tab Telusuri, dan cari paket NuGet sqlite-net-pcl.
Peringatan
Ada banyak paket NuGet dengan nama serupa. Paket yang benar memiliki atribut ini:
- Penulis: SQLite-net
- Tautan NuGet:sqlite-net-pcl
Terlepas dari nama paket, paket NuGet ini dapat digunakan dalam proyek .NET Standard.
Di Manajer Paket NuGet, pilih paket sqlite-net-pcl yang benar, centang kotak Centang proyek, dan klik tombol Instal untuk menambahkannya ke solusi:
Paket ini akan digunakan untuk menggabungkan operasi database ke dalam aplikasi, dan akan ditambahkan ke setiap proyek dalam solusi.
Penting
SQLite.NET adalah pustaka pihak ketiga yang didukung dari repositori praeclarum/sqlite-net.
Tutup Manajer Paket NuGet.
Di Penjelajah Solusi, dalam proyek Catatan, buka Note.cs di folder Model dan ganti kode yang ada dengan kode berikut:
using System; using SQLite; namespace Notes.Models { public class Note { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string Text { get; set; } public DateTime Date { get; set; } } }
Kelas ini mendefinisikan
Note
model yang akan menyimpan data tentang setiap catatan dalam aplikasi. PropertiID
ditandai denganPrimaryKey
atribut danAutoIncrement
untuk memastikan bahwa setiapNote
instans dalam database SQLite.NET akan memiliki id unik yang disediakan oleh SQLite.NET.Simpan perubahan ke Note.cs dengan menekan CTRL+S.
Peringatan
Aplikasi saat ini tidak akan dibangun karena kesalahan yang akan diperbaiki dalam langkah-langkah berikutnya.
Di Penjelajah Solusi, tambahkan folder baru bernama Data ke proyek Catatan.
Di Penjelajah Solusi, dalam proyek Catatan, tambahkan kelas baru bernama NoteDatabase ke folder Data.
Di NoteDatabase.cs, ganti kode yang ada dengan kode berikut:
using System.Collections.Generic; using System.Threading.Tasks; using SQLite; using Notes.Models; namespace Notes.Data { public class NoteDatabase { readonly SQLiteAsyncConnection database; public NoteDatabase(string dbPath) { database = new SQLiteAsyncConnection(dbPath); database.CreateTableAsync<Note>().Wait(); } public Task<List<Note>> GetNotesAsync() { //Get all notes. return database.Table<Note>().ToListAsync(); } public Task<Note> GetNoteAsync(int id) { // Get a specific note. return database.Table<Note>() .Where(i => i.ID == id) .FirstOrDefaultAsync(); } public Task<int> SaveNoteAsync(Note note) { if (note.ID != 0) { // Update an existing note. return database.UpdateAsync(note); } else { // Save a new note. return database.InsertAsync(note); } } public Task<int> DeleteNoteAsync(Note note) { // Delete a note. return database.DeleteAsync(note); } } }
Kelas ini berisi kode untuk membuat database, membaca data darinya, menulis data ke dalamnya, dan menghapus data darinya. Kode ini menggunakan API SQLite.NET asinkron yang memindahkan operasi database ke utas latar belakang. Selain itu,
NoteDatabase
konstruktor mengambil jalur file database sebagai argumen. Jalur ini akan disediakan olehApp
kelas di langkah berikutnya.Simpan perubahan ke NoteDatabase.cs dengan menekan CTRL+S.
Peringatan
Aplikasi saat ini tidak akan dibangun karena kesalahan yang akan diperbaiki dalam langkah-langkah berikutnya.
Di Penjelajah Solusi, dalam proyek Notes, perluas App.xaml dan klik dua kali App.xaml.cs untuk membukanya. Kemudian ganti kode yang ada dengan kode berikut:
using System; using System.IO; using Notes.Data; using Xamarin.Forms; namespace Notes { public partial class App : Application { static NoteDatabase database; // Create the database connection as a singleton. public static NoteDatabase Database { get { if (database == null) { database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes.db3")); } return database; } } public App() { InitializeComponent(); MainPage = new AppShell(); } protected override void OnStart() { } protected override void OnSleep() { } protected override void OnResume() { } } }
Kode ini mendefinisikan
Database
properti yang membuat instans baruNoteDatabase
sebagai singleton, meneruskan nama file database sebagai argumen keNoteDatabase
konstruktor. Keuntungan mengekspos database sebagai singleton adalah bahwa koneksi database tunggal dibuat yang tetap terbuka saat aplikasi berjalan, oleh karena itu menghindari pengeluaran membuka dan menutup file database setiap kali operasi database dilakukan.Simpan perubahan ke App.xaml.cs dengan menekan CTRL+S.
Peringatan
Aplikasi saat ini tidak akan dibangun karena kesalahan yang akan diperbaiki dalam langkah-langkah berikutnya.
Di Penjelajah Solusi, dalam proyek Catatan, perluas NotesPage.xaml di folder Tampilan dan buka NotesPage.xaml.cs. Kemudian ganti
OnAppearing
metode danOnSelectionChanged
dengan kode berikut:protected override async void OnAppearing() { base.OnAppearing(); // Retrieve all the notes from the database, and set them as the // data source for the CollectionView. collectionView.ItemsSource = await App.Database.GetNotesAsync(); } async void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.CurrentSelection != null) { // Navigate to the NoteEntryPage, passing the ID as a query parameter. Note note = (Note)e.CurrentSelection.FirstOrDefault(); await Shell.Current.GoToAsync($"{nameof(NoteEntryPage)}?{nameof(NoteEntryPage.ItemId)}={note.ID.ToString()}"); } }
Metode ini
OnAppearing
mengisiCollectionView
dengan catatan apa pun yang disimpan dalam database. MetodeOnSelectionChanged
menavigasi keNoteEntryPage
, meneruskanID
properti objek yang dipilihNote
sebagai parameter kueri.Simpan perubahan ke NotesPage.xaml.cs dengan menekan CTRL+S.
Peringatan
Aplikasi saat ini tidak akan dibangun karena kesalahan yang akan diperbaiki dalam langkah-langkah berikutnya.
Di Penjelajah Solusi, perluas NoteEntryPage.xaml di folder Tampilan dan buka NoteEntryPage.xaml.cs. Kemudian ganti
LoadNote
metode ,OnSaveButtonClicked
, danOnDeleteButtonClicked
dengan kode berikut:async void LoadNote(string itemId) { try { int id = Convert.ToInt32(itemId); // Retrieve the note and set it as the BindingContext of the page. Note note = await App.Database.GetNoteAsync(id); BindingContext = note; } catch (Exception) { Console.WriteLine("Failed to load note."); } } async void OnSaveButtonClicked(object sender, EventArgs e) { var note = (Note)BindingContext; note.Date = DateTime.UtcNow; if (!string.IsNullOrWhiteSpace(note.Text)) { await App.Database.SaveNoteAsync(note); } // Navigate backwards await Shell.Current.GoToAsync(".."); } async void OnDeleteButtonClicked(object sender, EventArgs e) { var note = (Note)BindingContext; await App.Database.DeleteNoteAsync(note); // Navigate backwards await Shell.Current.GoToAsync(".."); }
menggunakan
NoteEntryPage
LoadNote
metode untuk mengambil catatan dari database, yang ID-nya diteruskan sebagai parameter kueri ke halaman, dan menyimpannya sebagaiNote
objek diBindingContext
halaman.OnSaveButtonClicked
Saat penanganan aktivitas dijalankan,Note
instans disimpan ke database dan aplikasi menavigasi kembali ke halaman sebelumnya.OnDeleteButtonClicked
Saat penanganan aktivitas dijalankan,Note
instans dihapus dari database dan aplikasi menavigasi kembali ke halaman sebelumnya.Simpan perubahan ke NoteEntryPage.xaml.cs dengan menekan CTRL+S.
Bangun dan jalankan proyek di setiap platform. Untuk informasi selengkapnya, lihat Membangun mulai cepat.
Pada NotesPage tekan tombol Tambahkan untuk menavigasi ke NoteEntryPage dan masukkan catatan. Setelah menyimpan catatan, aplikasi akan menavigasi kembali ke NotesPage.
Masukkan beberapa catatan, dengan panjang yang bervariasi, untuk mengamati perilaku aplikasi. Tutup aplikasi dan luncurkan kembali untuk memastikan bahwa catatan yang Anda masukkan disimpan ke database.
Memperbarui aplikasi dengan Visual Studio untuk Mac
Luncurkan Visual Studio untuk Mac dan buka solusi Catatan.
Di Pad Solusi, klik kanan solusi Catatan dan pilih Kelola Paket NuGet...:
Dalam dialog Kelola Paket NuGet, pilih tab Telusuri, dan cari paket NuGet sqlite-net-pcl.
Peringatan
Ada banyak paket NuGet dengan nama serupa. Paket yang benar memiliki atribut ini:
- Penulis: SQLite-net
- Tautan NuGet:sqlite-net-pcl
Terlepas dari nama paket, paket NuGet ini dapat digunakan dalam proyek .NET Standard.
Dalam dialog Kelola Paket NuGet, pilih paket sqlite-net-pcl, dan klik tombol Tambahkan Paket untuk menambahkannya ke solusi:
Paket ini akan digunakan untuk menggabungkan operasi database ke dalam aplikasi.
Dalam dialog Pilih Proyek, pastikan bahwa setiap kotak centang dicentang dan tekan tombol Ok:
Ini akan menambahkan paket NuGet ke setiap proyek dalam solusi.
Di Solution Pad, dalam proyek Notes, buka Note.cs di folder Model dan ganti kode yang ada dengan kode berikut:
using System; using SQLite; namespace Notes.Models { public class Note { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string Text { get; set; } public DateTime Date { get; set; } } }
Kelas ini mendefinisikan
Note
model yang akan menyimpan data tentang setiap catatan dalam aplikasi. PropertiID
ditandai denganPrimaryKey
atribut danAutoIncrement
untuk memastikan bahwa setiapNote
instans dalam database SQLite.NET akan memiliki id unik yang disediakan oleh SQLite.NET.Simpan perubahan ke Note.cs dengan memilih Simpan File > (atau dengan menekan ⌘ + S).
Peringatan
Aplikasi saat ini tidak akan dibangun karena kesalahan yang akan diperbaiki dalam langkah-langkah berikutnya.
Di Solution Pad, tambahkan folder baru bernama Data ke proyek Catatan .
Di Pad Solusi, dalam proyek Catatan, tambahkan kelas baru bernama NoteDatabase ke folder Data.
Di NoteDatabase.cs, ganti kode yang ada dengan kode berikut:
using System.Collections.Generic; using System.Threading.Tasks; using SQLite; using Notes.Models; namespace Notes.Data { public class NoteDatabase { readonly SQLiteAsyncConnection database; public NoteDatabase(string dbPath) { database = new SQLiteAsyncConnection(dbPath); database.CreateTableAsync<Note>().Wait(); } public Task<List<Note>> GetNotesAsync() { //Get all notes. return database.Table<Note>().ToListAsync(); } public Task<Note> GetNoteAsync(int id) { // Get a specific note. return database.Table<Note>() .Where(i => i.ID == id) .FirstOrDefaultAsync(); } public Task<int> SaveNoteAsync(Note note) { if (note.ID != 0) { // Update an existing note. return database.UpdateAsync(note); } else { // Save a new note. return database.InsertAsync(note); } } public Task<int> DeleteNoteAsync(Note note) { // Delete a note. return database.DeleteAsync(note); } } }
Kelas ini berisi kode untuk membuat database, membaca data darinya, menulis data ke dalamnya, dan menghapus data darinya. Kode ini menggunakan API SQLite.NET asinkron yang memindahkan operasi database ke utas latar belakang. Selain itu,
NoteDatabase
konstruktor mengambil jalur file database sebagai argumen. Jalur ini akan disediakan olehApp
kelas di langkah berikutnya.Simpan perubahan ke NoteDatabase.cs dengan memilih Simpan File > (atau dengan menekan ⌘ + S).
Peringatan
Aplikasi saat ini tidak akan dibangun karena kesalahan yang akan diperbaiki dalam langkah-langkah berikutnya.
Di Pad Solusi, dalam proyek Catatan, perluas App.xaml dan klik dua kali App.xaml.cs untuk membukanya. Kemudian ganti kode yang ada dengan kode berikut:
using System; using System.IO; using Notes.Data; using Xamarin.Forms; namespace Notes { public partial class App : Application { static NoteDatabase database; // Create the database connection as a singleton. public static NoteDatabase Database { get { if (database == null) { database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes.db3")); } return database; } } public App() { InitializeComponent(); MainPage = new AppShell(); } protected override void OnStart() { } protected override void OnSleep() { } protected override void OnResume() { } } }
Kode ini mendefinisikan
Database
properti yang membuat instans baruNoteDatabase
sebagai singleton, meneruskan nama file database sebagai argumen keNoteDatabase
konstruktor. Keuntungan mengekspos database sebagai singleton adalah bahwa koneksi database tunggal dibuat yang tetap terbuka saat aplikasi berjalan, oleh karena itu menghindari pengeluaran membuka dan menutup file database setiap kali operasi database dilakukan.Simpan perubahan ke App.xaml.cs dengan memilih Simpan File > (atau dengan menekan ⌘ + S).
Peringatan
Aplikasi saat ini tidak akan dibangun karena kesalahan yang akan diperbaiki dalam langkah-langkah berikutnya.
Di Pad Solusi, dalam proyek Catatan, perluas NotesPage.xaml di folder Tampilan dan buka NotesPage.xaml.cs. Kemudian ganti
OnAppearing
metode danOnSelectionChanged
dengan kode berikut:protected override async void OnAppearing() { base.OnAppearing(); // Retrieve all the notes from the database, and set them as the // data source for the CollectionView. collectionView.ItemsSource = await App.Database.GetNotesAsync(); } async void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { if (e.CurrentSelection != null) { // Navigate to the NoteEntryPage, passing the ID as a query parameter. Note note = (Note)e.CurrentSelection.FirstOrDefault(); await Shell.Current.GoToAsync($"{nameof(NoteEntryPage)}?{nameof(NoteEntryPage.ItemId)}={note.ID.ToString()}"); } }
Metode ini
OnAppearing
mengisiCollectionView
dengan catatan apa pun yang disimpan dalam database. MetodeOnSelectionChanged
menavigasi keNoteEntryPage
, meneruskanID
properti objek yang dipilihNote
sebagai parameter kueri.Simpan perubahan ke NotesPage.xaml.cs dengan memilih Simpan File > (atau dengan menekan ⌘ + S).
Peringatan
Aplikasi saat ini tidak akan dibangun karena kesalahan yang akan diperbaiki dalam langkah-langkah berikutnya.
Di Pad Solusi, perluas NoteEntryPage.xaml di folder Tampilan dan buka NoteEntryPage.xaml.cs. Kemudian ganti
LoadNote
metode ,OnSaveButtonClicked
, danOnDeleteButtonClicked
dengan kode berikut:async void LoadNote(string itemId) { try { int id = Convert.ToInt32(itemId); // Retrieve the note and set it as the BindingContext of the page. Note note = await App.Database.GetNoteAsync(id); BindingContext = note; } catch (Exception) { Console.WriteLine("Failed to load note."); } } async void OnSaveButtonClicked(object sender, EventArgs e) { var note = (Note)BindingContext; note.Date = DateTime.UtcNow; if (!string.IsNullOrWhiteSpace(note.Text)) { await App.Database.SaveNoteAsync(note); } // Navigate backwards await Shell.Current.GoToAsync(".."); } async void OnDeleteButtonClicked(object sender, EventArgs e) { var note = (Note)BindingContext; await App.Database.DeleteNoteAsync(note); // Navigate backwards await Shell.Current.GoToAsync(".."); }
menggunakan
NoteEntryPage
LoadNote
metode untuk mengambil catatan dari database, yang ID-nya diteruskan sebagai parameter kueri ke halaman, dan menyimpannya sebagaiNote
objek diBindingContext
halaman.OnSaveButtonClicked
Saat penanganan aktivitas dijalankan,Note
instans disimpan ke database dan aplikasi menavigasi kembali ke halaman sebelumnya.OnDeleteButtonClicked
Saat penanganan aktivitas dijalankan,Note
instans dihapus dari database dan aplikasi menavigasi kembali ke halaman sebelumnya.Simpan perubahan ke NoteEntryPage.xaml.cs dengan memilih Simpan File > (atau dengan menekan ⌘ + S).
Bangun dan jalankan proyek di setiap platform. Untuk informasi selengkapnya, lihat Membangun mulai cepat.
Pada NotesPage tekan tombol Tambahkan untuk menavigasi ke NoteEntryPage dan masukkan catatan. Setelah menyimpan catatan, aplikasi akan menavigasi kembali ke NotesPage.
Masukkan beberapa catatan, dengan panjang yang bervariasi, untuk mengamati perilaku aplikasi. Tutup aplikasi dan luncurkan kembali untuk memastikan bahwa catatan yang Anda masukkan disimpan ke database.
Langkah berikutnya
Dalam mulai cepat ini, Anda belajar cara:
- Simpan data secara lokal dalam database SQLite.NET.
Lanjutkan ke mulai cepat berikutnya untuk menata aplikasi dengan gaya XAML.