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로 열어도 그 결과를 확인할 수 있습니다.
'Application Programming Interface > Universal Windows Platform' 카테고리의 다른 글
| Universal Windows Platform (UWP)에서 SQLCipher 사용하기 (1) | 2017.02.13 |
|---|