본문 바로가기

Application Programming Interface/Universal Windows Platform

Universal Windows Platform (UWP)에서 SQLite 사용하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Windows 10 기반의 장치(PC, Phone, Table 등)에서 Local DB(SQLite)를 사용하는 방법입니다.

참고: 이 글을 작성하는 현재 Univerasal Windows Platform(UWP)에서 SQLite는 3rd Party 확장을 통해 지원하지만 암호화 도구인 SQLCipher는 상용 라이브러리(USD 899)를 구입하여 이식하는 수 밖에 없습니다.

이 글에서는 암호화를 하지 않고 순수 SQLite를 사용하는 방법에 대해서만 적어 둡니다.

 

1. Visual Studio에 SQLite 확장기능을 설치하기 위해 [도구(T)] - [확장 및 업데이트(U)]를 클릭합니다.

 

2. 팝업창 좌측의 [온라인] 메뉴를 클릭 후 화면 우측 검색창에서 "SQLite"를 검색합니다. 검색 결과에서 "SQLite for Universal Windows Platform"을 클릭 후 설치합니다.

여기까지의 과정은 Visual Studio 자체에 SQLite 확장 기능을 설치하는 것이므로 최초 1회만 해 두면 다음에 또 반복할 필요가 없습니다. 

 

3. 프로젝트에 SQLite를 적용합니다. 아래 그림과 같이 [참조 추가(R)]을 클릭합니다.

 

4. 팝업 창에서 [Universal Windows] - [확장] 메뉴로 들어가서 "SQLite for Universal Windows Platform"을 체크하고 [확인]을 누릅니다.

 

5. 이제 프로젝트에 SQLite 모듈이 이식되었습니다. 단, C#에서 SQLite 모듈이 제공하는 기능들을 호출하기 위해서는 .NET Wrapper 모듈이 필요합니다.

[도구(T)] - [NuGet 패키지 관리자(N)] - [솔루션용 NuGet 패키지 관리...]를 클릭합니다.

 

6. "찾아보기" 탭에서 "SQLite.Net"을 검색하면 "SQLite.Net-PCL"이 있습니다. 이식을 원하는 프로젝트에 체크하고 [설치]를 클릭합니다.

 

7. 한번 더 물어보는 대화상자가 뜨면 "확인"을 누릅니다.

 

8. 이제 프로젝트에서 SQLite를 사용할 수 있습니다.

예를 들어 아래와 같이 테이블을 선언하고 사용하고자 합니다.

CREATE TABLE Person (
    'id' INTEGER PRIMARY KEY AUTOINCREMENT,
    'name' TEXT NOT NULL,
    'address' TEXT);

이를 클래스로 선언하는 방법은 아래와 같습니다.

using SQLite.Net.Attributes;
using SQLite.Net.Cipher.Data;

namespace App1
{
    [Table("Person")]
    class Person
    {
        [Column("id")]
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        [Column("name")]
        [NotNull]
        public string Name { get; set; }

        [Column("address")]
        public string Address { get; set; }
    }
}

 

9. 이제 어플리케이션에서 데이터베이스를 생성/열기 한 후 테이블에 접근하여 쿼리를 수행해보겠습니다.

어플리케이션에서는 아래와 같이 활용하면 됩니다.

using SQLite.Net.Interop;
using SQLite.Net.Platform.WinRT;

namespace App1
{
    public sealed partial class MainPage : Page
    {
        public static void TestDatabase()
        {
            // 데이터베이스 파일은 C:\Users\<사용자>\AppData\Local\Packages\<앱의 식별 ID>\LocalState에 저장될 것입니다.
            string pathLocal = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "database.sqlite");
            // Universal Windows Platform에서 실행될 것이므로 플랫폼은 SQLite.Net.Platform.WinRT.SQLitePlatformWinRT를 지정합니다.
            ISQLitePlatform sqlitePlatform = new SQLitePlatformWinRT();
            Person person = null;

            // 데이터베이스에 연결합니다. 없으면 새로 생성 후 연결될 것입니다.
            using (SQLCipherConnection conn = new SQLCipherConnection(sqlitePlatform, pathLocal))
            {
                // 테이블 생성
                conn.CreateTable();

                // 레코드 삽입
                person = new Person { Name = "David", Address = "U.S." };
                conn.Insert(person);

                person = new Person { Name = "Steve", Address = "France" };
                conn.Insert(person);

                person = new Person { Name = "Catherine", Address = "Canada" };
                conn.Insert(person);

                // 레코드 조회
                var resultList = conn.Query("SELECT * FROM Person WHERE (name = 'Steve');");
                foreach (var result in resultList)
                {
                    Debug.WriteLine(string.Format("고유번호 = {0}, 이름 = {1}, 주소 = {2}", result.Id, result.Name, result.Address));
                }
            }
        }
    }
}

 

10. SQLite Browser로 열어도 그 결과를 확인할 수 있습니다.