Xamarin.Forms Yerel Veritabanı Öğreticisi
Bu öğreticiye başlamadan önce şunları başarıyla tamamlamış olmanız gerekir:
- İlk Xamarin.Forms uygulama hızlı başlangıcınızı oluşturun.
- StackLayout öğreticisi.
- Düğme öğreticisi.
- Giriş öğreticisi.
- CollectionView öğreticisi.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Projeye SQLite.NET eklemek için NuGet Paket Yöneticisi Xamarin.Forms kullanın.
- Veri erişim sınıflarını oluşturma.
- Veri erişim sınıflarını kullanma.
Yerel bir SQLite.NET veritabanında verileri depolamayı gösteren basit bir uygulama oluşturmak için Visual Studio 2019 veya Mac için Visual Studio kullanacaksınız. Aşağıdaki ekran görüntüleri, son uygulamayı gösterir:
SQLite.NET ekleme
Bu öğreticiyi tamamlamak için Visual Studio 2019 (son sürüm) ve .NET ile mobil uygulama geliştirme iş yükü sisteminizde yüklü olmalıdır. Ayrıca öğretici uygulamasını iOS üzerinde derleyebilmek için eşleştirilmiş bir Mac de gerekecektir. Xamarin platformunu yükleme hakkında bilgi için bkz. Xamarin'i Yükleme. Visual Studio 2019'u bir Mac derleme ana bilgisayarına bağlama hakkında bilgi için bkz. Xamarin.iOS geliştirme için Mac ile eşleştirme.
Visual Studio'yu başlatın ve LocalDatabaseTutorial adlı yeni bir boş Xamarin.Forms uygulama oluşturun.
Önemli
Bu öğreticide kullanılan C# ve XAML kod parçacıklarında çözüm adı LocalDatabaseTutorial olarak belirlenmiştir. Farklı bir ad kullanırsanız bu öğreticideki kodları çözüme kopyaladığınızda derleme hatalarıyla karşılaşabilirsiniz.
Oluşturulan .NET Standard kitaplığı hakkında daha fazla bilgi için Bkz. Hızlı Başlangıç Ayrıntılı Bakış'taXamarin.Forms uygulamanın Xamarin.Forms anatomisi.
Çözüm Gezgini'nde LocalDatabaseTutorial projesini seçin, sağ tıklayın ve NuGet Paketlerini Yönet'i seçin:
NuGet Paket Yöneticisi'nde Göz at sekmesini seçin, sqlite-net-pcl NuGet paketini arayın, seçin ve Yükle düğmesine tıklayarak projeye ekleyin:
Not
Benzer adlara sahip birçok NuGet paketi vardır. Doğru paketi şu özelliklerle ayırt edebilirsiniz:
- Yazarlar: SQLite-net
- NuGet bağlantısı: sqlite-net-pcl
Adı farklı olsa da bu NuGet paketi .NET Standard projelerinde kullanılabilir.
Bu paket, uygulamaya veritabanı işlemlerini eklemek için kullanılacaktır.
Önemli
SQLite.NET, praeclarum/sqlite-net deposunda desteklenen bir üçüncü taraf kitaplığıdır.
Hata olmadığından emin olmak için çözümü derleyin.
Veri erişim sınıflarını oluşturma
Bu alıştırmada kişilerle ilgili verileri veritabanında kalıcı hale getirmek için kullanılacak olan LocalDatabaseTutorial projesine veri erişim sınıfları ekleyeceksiniz.
Çözüm Gezgini'ndeki LocalDatabaseTutorial projesine
Person
adlı yeni bir sınıf ekleyin. Ardından Person.cs içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin:using SQLite; namespace LocalDatabaseTutorial { public class Person { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } } }
Bu kod, kişilerle ilgili verileri uygulamada depolayacak olan bir
Person
sınıfını tanımlar.ID
özelliği, veritabanındaki her birPerson
örneğinin SQLite.NET tarafından sağlanan benzersiz bir kimliğe sahip olmasını sağlamak içinPrimaryKey
veAutoIncrement
öznitelikleriyle işaretlenmiştir.Çözüm Gezgini'ndeki LocalDatabaseTutorial projesine
Database
adlı yeni bir sınıf ekleyin. Ardından Database.cs içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin:using System.Collections.Generic; using System.Threading.Tasks; using SQLite; namespace LocalDatabaseTutorial { public class Database { readonly SQLiteAsyncConnection _database; public Database(string dbPath) { _database = new SQLiteAsyncConnection(dbPath); _database.CreateTableAsync<Person>().Wait(); } public Task<List<Person>> GetPeopleAsync() { return _database.Table<Person>().ToListAsync(); } public Task<int> SavePersonAsync(Person person) { return _database.InsertAsync(person); } } }
Bu sınıf veritabanını oluşturmak, verileri okumak ve veri yazmak için kullanılacak kodu içerir. Kod, veritabanı işlemlerini arka plandaki iş parçacıklara taşıyan zaman uyumsuz SQLite.NET API'lerini kullanır. Ayrıca
Database
oluşturucusu, veritabanı dosyasının yolunu bir bağımsız değişken olarak alır. Bu yol, bir sonraki alıştırmadaApp
sınıfı tarafından sağlanacaktır.Çözüm Gezgini'ndeki LocalDatabaseTutorial projesinde App.xaml bölümünü genişlettikten sonra App.xaml.cs dosyasına çift tıklayıp açın. Ardından App.xaml.cs içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin:
using System; using System.IO; using Xamarin.Forms; namespace LocalDatabaseTutorial { public partial class App : Application { static Database database; public static Database Database { get { if (database == null) { database = new Database(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "people.db3")); } return database; } } public App() { InitializeComponent(); MainPage = new MainPage(); } protected override void OnStart() { // Handle when your app starts } protected override void OnSleep() { // Handle when your app sleeps } protected override void OnResume() { // Handle when your app resumes } } }
Bu kod, tekil olarak yeni bir
Database
örneği oluşturan birDatabase
özelliğini tanımlar. Veritabanının depolanacağı yeri belirten yerel dosya yolu ve dosya adı,Database
sınıf oluşturucusuna bağımsız değişken olarak geçirilir.Önemli
Veritabanını tekil olarak belirtmenin avantajı, uygulama çalışırken tek bir veritabanı bağlantısının oluşturulup açık tutulması ve bu sayede her veritabanı işlemi gerçekleştirildiğinde veritabanı dosyasını açma ve kapatma gereksiniminin ortadan kaldırılmasıdır.
Hata olmadığından emin olmak için çözümü derleyin.
Veri erişim sınıflarını kullanma
Bu alıştırmada önceden oluşturulan veri erişimi sınıflarını kullanmak üzere bir kullanıcı arabirimi oluşturacaksınız.
Çözüm Gezgini'ndeki LocalDatabaseTutorial projesinde MainPage.xaml dosyasına çift tıklayıp açın. Ardından MainPage.xaml içindeki şablon kodunun tamamını silip aşağıdaki kodu ekleyin:
<?xml version="1.0" encoding="utf-8"?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="LocalDatabaseTutorial.MainPage"> <StackLayout Margin="20,35,20,20"> <Entry x:Name="nameEntry" Placeholder="Enter name" /> <Entry x:Name="ageEntry" Placeholder="Enter age" /> <Button Text="Add to Database" Clicked="OnButtonClicked" /> <CollectionView x:Name="collectionView"> <CollectionView.ItemTemplate> <DataTemplate> <StackLayout> <Label Text="{Binding Name}" FontSize="Medium" /> <Label Text="{Binding Age}" TextColor="Silver" FontSize="Small" /> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </StackLayout> </ContentPage>
Bu kod, sayfa için kullanıcı arabirimini bildirimli bir şekilde tanımlar ve bu da bir
StackLayout
içindeki ikiEntry
örneğinden, birButton
öğesinden ve birCollectionView
öğesinden oluşur. HerEntry
, kullanıcı girişi öncesinde gösterilen yer tutucu metnini belirten kendine özgüPlaceholder
özellik kümesine sahiptir.Button
,Clicked
olayını bir sonraki adımda oluşturulacakOnButtonClicked
adlı olay işleyicisi olarak ayarlamıştır.CollectionView
,ItemTemplate
özelliğiniCollectionView
içindeki her bir satırın görünümünü tanımlamak üzere birStackLayout
ve ikiLabel
nesnesi kullanan birDataTemplate
öğesine ayarlar.Label
nesneleriText
özellikleriyle her birPerson
nesnesininName
veAge
özellikleri arasında veri bağlama gerçekleştirir.Ayrıca
Entry
örneklerinin veCollectionView
öğesinin adları,x:Name
özniteliğinde belirtilmiştir. Bu da arka plandaki kodun atanmış adları kullanarak bu nesnelere erişmesini sağlar.Çözüm Gezgini'ndeki LocalDatabaseTutorial projesinde MainPage.xaml bölümünü genişletip MainPage.xaml.cs dosyasına çift tıklayarak açın. Ardından MainPage.xaml.cs içinde sınıfa
OnAppearing
geçersiz kılma işlemini veOnButtonClicked
olay işleyicisini ekleyin:protected override async void OnAppearing() { base.OnAppearing(); collectionView.ItemsSource = await App.Database.GetPeopleAsync(); } async void OnButtonClicked(object sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(nameEntry.Text) && !string.IsNullOrWhiteSpace(ageEntry.Text)) { await App.Database.SavePersonAsync(new Person { Name = nameEntry.Text, Age = int.Parse(ageEntry.Text) }); nameEntry.Text = ageEntry.Text = string.Empty; collectionView.ItemsSource = await App.Database.GetPeopleAsync(); } }
OnAppearing
yöntemi,CollectionView
öğesini veritabanında depolanan verilerle doldurur.Button
öğesine dokunulduğunda yürütülenOnButtonClicked
yöntemi, girilen verileri veritabanına kaydettikten sonra ikiEntry
örneğini de silipCollectionView
içindeki verileri yeniler.Not
OnAppearing
yöntemi geçersiz kılma işlemi,ContentPage
yerleştirildikten sonra ancak görünür duruma gelmeden önce yürütülür. Bu nedenle, burası görünümlerin içeriğini ayarlamak için iyi bir yerdir Xamarin.Forms .Visual Studio araç çubuğunda Başlat düğmesine (Oynat düğmesine benzeyen üçgen düğme) basarak uygulamayı seçtiğiniz uzak iOS simülatöründe veya Android öykünücüsünde başlatın.
Her veri öğesi için
Button
öğesine dokunarak birden fazla veri öğesi girin. Bunu yaptığınızda veriler, veritabanına kaydedilir veCollectionView
, veritabanındaki tüm verilerle doldurulur:Visual Studio'da uygulamayı durdurun.
içindeki Xamarin.Formsyerel veritabanları hakkında daha fazla bilgi için bkz. Xamarin.Forms Yerel Veritabanları (kılavuz)
Tebrikler!
Tebrikler, bu öğreticiyi tamamlayarak aşağıdakilerin nasıl yapıldığını öğrendiniz:
- Projeye SQLite.NET eklemek için NuGet Paket Yöneticisi Xamarin.Forms kullanın.
- Veri erişim sınıflarını oluşturma.
- Veri erişim sınıflarını kullanma.
Sonraki adımlar
ile Xamarin.Formsmobil uygulama oluşturmanın temelleri hakkında daha fazla bilgi edinmek için Web Hizmetleri öğreticisine geçin.
İlgili bağlantılar
Bu bölümle ilgili bir sorununuz mu var? Öyleyse bu bölümü iyileştirebilmemiz için lütfen geri bildirimde bulunun.