Xamarin.Forms 로컬 데이터베이스 자습서
이 자습서를 시도하기 전에 다음 작업을 성공적으로 완료해야 합니다.
- 첫 번째 Xamarin.Forms 앱을 빌드하세요 빠른 시작.
- StackLayout 자습서
- 단추 자습서
- 항목 자습서
- CollectionView 자습서
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- NuGet Package Manager를 사용하여 SQLite.NET을 Xamarin.Forms 프로젝트에 추가합니다.
- 데이터 액세스 클래스를 만듭니다.
- 데이터 액세스 클래스를 사용합니다.
Visual Studio 2019 또는 Mac용 Visual Studio를 사용하여 로컬 SQLite.NET 데이터베이스에 데이터를 저장하는 방법을 보여 주는 간단한 애플리케이션을 만들겠습니다. 다음 스크린샷은 최종 애플리케이션을 보여 줍니다.
SQLite.NET 추가
이 자습서를 완료하려면 .NET을 사용한 모바일 개발 워크로드가 설치된 Visual Studio 2019(최신 릴리스)가 있어야 합니다. 또한 iOS에서 자습서 애플리케이션을 빌드하려면 페어링된 Mac이 필요합니다. Xamarin 플랫폼 설치에 대한 자세한 내용은 Xamarin 설치를 참조하세요. Visual Studio 2019를 Mac 빌드 호스트에 연결하는 방법에 대한 자세한 내용은 Xamarin.iOS 개발을 위해 Mac에 페어링을 참조하세요.
Visual Studio를 실행하고 LocalDatabaseTutorial이라는 이름의 빈 Xamarin.Forms 앱을 새로 만듭니다.
Important
이 자습서의 C# 및 XAML 코드 조각은 솔루션의 이름이 LocalDatabaseTutorial이어야 합니다. 이 자습서에서 코드를 솔루션으로 복사할 때 다른 이름을 사용하면 빌드 오류가 발생합니다.
생성된 .NET Standard 라이브러리에 대한 자세한 내용은 Xamarin.Forms 빠른 시작 심층 분석에서 Xamarin.Forms 애플리케이션 분석을 참조하세요.
솔루션 탐색기에서 LocalDatabaseTutorial 프로젝트를 선택하고 마우스 오른쪽 단추로 클릭한 다음, NuGet 패키지 관리...를 선택합니다.
NuGet 패키지 관리자에서 찾아보기 탭을 선택하고 sqlite-net-pcl NuGet 패키지를 검색하여 선택한 다음, 설치 단추를 클릭하여 프로젝트에 추가합니다.
참고 항목
이름이 유사한 NuGet 패키지가 많이 있습니다. 올바른 패키지에는 이러한 특성이 있습니다.
- 작성자: SQLite-net
- NuGet 링크: sqlite-net-pcl
패키지 이름에도 불구하고 이 NuGet 패키지는 .NET 표준 패키지에서 사용할 수 있습니다.
이 패키지는 데이터베이스 작업을 애플리케이션에 통합하는 데 사용됩니다.
Important
SQLite.NET praeclarum/sqlite-net 리포지토리에서 지원되는 타사 라이브러리입니다.
오류가 없는지 확인하기 위해 솔루션을 빌드합니다.
데이터 액세스 클래스 만들기
이 연습에서는 데이터 액세스 클래스를 LocalDatabaseTutorial 프로젝트에 추가합니다. 이 프로젝트는 여러 사람에 대한 데이터를 데이터베이스에 보존하는 데 사용됩니다.
솔루션 탐색기의 LocalDatabaseTutorial 프로젝트에서
Person
이라는 새 클래스를 프로젝트에 추가합니다. 그런 다음, Person.cs에서 템플릿 코드를 모두 제거하고 다음 코드로 바꿉니다.using SQLite; namespace LocalDatabaseTutorial { public class Person { [PrimaryKey, AutoIncrement] public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } } }
이 코드는 애플리케이션의 각 개인에 대한 데이터를 저장하는
Person
클래스를 정의합니다.ID
속성은 데이터베이스의 각Person
인스턴스가 SQLite.NET에서 제공되는 고유 ID를 갖도록PrimaryKey
및AutoIncrement
특성과 함께 표시됩니다.솔루션 탐색기의 LocalDatabaseTutorial 프로젝트에서
Database
이라는 새 클래스를 프로젝트에 추가합니다. 그런 다음, Database.cs에서 템플릿 코드를 모두 제거하고 다음 코드로 바꿉니다.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); } } }
이 클래스에는 데이터베이스를 만들고, 그 데이터베이스로부터 데이터를 읽고 쓰는 코드가 있습니다. 코드는 데이터베이스 작업을 백그라운드 스레드로 이동시키는 비동기 SQLite.NET API를 사용합니다. 또한
Database
생성자는 데이터베이스 파일의 경로를 인수로 사용합니다. 이 경로는 다음 연습에서App
클래스에 의해 제공됩니다.솔루션 탐색기의 LocalDatabaseTutorial 프로젝트에서 App.xaml을 확장하고 App.xaml.cs를 두 번 클릭하여 엽니다. 그런 다음, App.xaml.cs에서 템플릿 코드를 모두 제거하고 다음 코드로 바꿉니다.
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 } } }
이 코드는 새로운
Database
인스턴스를 싱글톤으로 생성하는Database
속성을 정의합니다. 데이터베이스를 저장할 위치를 나타내는 로컬 파일 경로와 파일 이름이 인수로Database
클래스 생성자에 전달됩니다.Important
데이터베이스를 싱글톤으로 노출하면 애플리케이션이 실행되는 동안 열린 상태로 유지되는 단일 데이터베이스 연결이 생성되므로 데이터베이스 작업이 수행될 때마다 데이터베이스 파일을 열거나 닫는 비용을 피할 수 있는 이점이 있습니다.
오류가 없는지 확인하기 위해 솔루션을 빌드합니다.
데이터 액세스 클래스 사용
이 연습에서는 이전에 만든 데이터 액세스 클래스를 사용하는 사용자 인터페이스를 만듭니다.
솔루션 탐색기의 LocalDatabaseTutorial 프로젝트에서 MainPage.xaml을 두 번 클릭하여 엽니다. 그런 다음, MainPage.xaml에서 템플릿 코드를 모두 제거하고 다음 코드로 바꿉니다.
<?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>
이 코드는
StackLayout
에서Entry
인스턴스 두 개,Button
한 개 및CollectionView
한 개로 구성된 페이지에 대한 사용자 인터페이스를 선언적으로 정의합니다. 각Entry
에는 해당하는Placeholder
속성 세트가 포함되며 여기서는 사용자 입력 이전에 표시되는 자리 표시자 텍스트를 지정합니다.Button
은 해당하는Clicked
이벤트를 다음 단계에서 만들OnButtonClicked
라는 이벤트 처리기로 설정합니다.CollectionView
는 해당하는ItemTemplate
속성을DataTemplate
으로 설정합니다. 여기서는StackLayout
과Label
개체 두 개를 사용하여CollectionView
에 있는 각 행의 모양을 정의합니다.Label
개체는 해당하는Text
속성을 각Person
개체의Name
및Age
속성으로 각각 바인딩합니다.또한
Entry
인스턴스 및CollectionView
의 이름은x:Name
특성을 사용하여 지정됩니다. 그러면 코드 숨김 파일이 할당된 이름을 사용하여 이러한 개체에 액세스할 수 있습니다.솔루션 탐색기의 LocalDatabaseTutorial 프로젝트에서 MainPage.xaml을 확장하고 MainPage.xaml.cs를 두 번 클릭하여 엽니다. 그런 다음, MainPage.xaml.cs에서
OnAppearing
재정의 및OnButtonClicked
이벤트 처리기를 클래스에 추가합니다.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
메서드는CollectionView
를 데이터베이스에 저장된 데이터로 채웁니다.Button
을 누를 때 실행되는OnButtonClicked
메서드에서는Entry
인스턴스를 모두 지우고CollectionView
에 있는 데이터를 새로 고치기 전에 입력된 데이터를 데이터베이스에 저장합니다.참고 항목
ContentPage
를 레이아웃하고 나서 표시되기 전에OnAppearing
메서드 재정의가 실행됩니다. 따라서 여기서 Xamarin.Forms 보기의 콘텐츠를 설정하는 것이 좋습니다.Visual Studio 도구 모음에서 선택한 원격 iOS 시뮬레이터 또는 Android 에뮬레이터 내에서 애플리케이션을 시작하려면 시작 단추(재생 단추와 비슷한 삼각형 모양의 단추)를 누릅니다.
데이터의 여러 항목을 입력하고 데이터의 각 항목에 대한
Button
을 누릅니다. 그러면 데이터를 데이터베이스에 저장하고,CollectionView
를 모든 데이터베이스 데이터로 다시 채웁니다.Visual Studio에서 애플리케이션을 중지합니다.
Xamarin.Forms의 로컬 데이터베이스에 대한 자세한 내용은 Xamarin.Forms 로컬 데이터베이스(가이드)를 참조하세요.
축하합니다!
축하합니다. 자습서를 마쳤습니다. 여기서는 다음과 같은 방법을 알아보았습니다.
- NuGet Package Manager를 사용하여 SQLite.NET을 Xamarin.Forms 프로젝트에 추가합니다.
- 데이터 액세스 클래스를 만듭니다.
- 데이터 액세스 클래스를 사용합니다.
다음 단계
Xamarin.Forms를 사용하여 모바일 애플리케이션을 만드는 기본 사항에 대해 자세히 알아보려면 Web Services 자습서를 계속 진행합니다.
관련 링크
본 섹션과 관련하여 문제가 있으십니까? 문제가 있으시면 본 섹션을 개선하기 위해 피드백을 제출해 주세요.