프레임워크/Unity

유니티와 sqlite 연동하기 C#(다운, 사용법, PC, android, DB, query)

멍토 2020. 6. 26.

제가 sqlite를 진행하면서 겪었던 사항들이 많아서 다른 분도 저처럼 고생 안 했으면 좋겠다는 생각에 sqlite 연동 법을 쓰게 됐습니다.

다운로드부터 쿼리 던지는것까지 해보도록 하겠습니다.

(네이버 블로그에서 이전했기때문에 내용이 조금 다를 수 있습니다. 초기작성 : 2019.03.10)


목차

1. Sqltie 다운받기

2. DB 생성하기

3. 스크립트(Script) 작성(코딩)

  1. DB 이동하기
  2. 연결 상태 확인하기
  3. DB 읽어오기

3-4 DB 삽입, 삭제, 수정

4. 쿼리의 이해

  1.  읽기
  2.  삽입
  3.  삭제
  4. 4수정

1. Sqlite 다운받기

아래의 사이트에 들어가서 자기와 맞는 버전을 다운로드합니다.

https://www.sqlite.org/download.html

 

SQLite Download Page

Templates (1) and (2) are used for source-code products. Template (1) is used for generic source-code products and templates (2) is used for source-code products that are generally only useful on unix-like platforms. Template (3) is used for precompiled bi

www.sqlite.org

저는 사용하는 컴퓨터가 윈도 64 bit를 사용하고 있어서 표시한 걸 받았습니다.

다운을 받으면 2개의 파일이 있습니다.

이 파일을 Unity 프로젝트의 Assets/Plugins 밑에 넣습니다.

(폴더가 없다면 생성하시면 됩니다.)

 

여기서 끝나면 좋겠지만... 아쉽게도 dll 파일들이 더 필요합니다.

인터넷에 돌아다니는 dll 파일을 받으시면 버전이 안 맞아서 동작이 안되는 경우가 많고, 무슨 짓을 했을지 모르기 때문에(바이러스 등) 자기 Unity 폴더에서 가져오도록 하겠습니다.

자신이 설치한 Unity 폴더에 가셔서 찾으시면 됩니다.

저는 D 드라이브에 설치를 했기 때문에 위치는 아래와 같이 됩니다.

이 파일들을 찾으셨다면 복사하셔서 아까 넣은 위치에 넣으시면 됩니다.

PC에서 sqlite를 사용하실 거면 여기까지만 하셔도 되지만 안드로이드에서 sqltie를 사용하기 위해서는 파일이 더 필요합니다.

아래 파일들은 첨부파일로 올려두겠습니다.(수정본입니다.)

Android.zip
0.56MB

이 파일들을 받아서(다른 곳에서 구하셔서 사용하셔도 됩니다. 제가 사용을 해보고 되는 파일을 가져왔습니다.) 아래와 같은 위치에 넣으시면 됩니다.

Assets/Plugins/Android/libs/(2개 폴더)

여기까지 하셨으면 sqlite를 사용하기 위한 기본 세팅이 끝났습니다.


2. DB 생성하기

DB를 생성하는 방법은 툴을 이용하거나 스크립트를 이용하는 방법이 있습니다.

저는 여기서 툴을 이용하여 생성하는 방식을 알려드리겠습니다.

아래 사이트에 들어가서 DB Browser를 다운받습니다.

https://sqlitebrowser.org/dl/

 

Downloads - DB Browser for SQLite

(Please consider sponsoring us on Patreon 😄) Windows Our latest release (3.12.0) for Windows: Note - If for any reason the standard Windows release does not work (e.g. gives an error), try a nightly build (below). Nightly builds often fix bugs reported

sqlitebrowser.org

저는 아래의 버전을 받았습니다.(Windows 64bit를 사용하시는 분은 이걸로)

다운을 받으시면 2가지 체크박스가 나올 겁니다

일반 버전하고 하나는 암호화가 가능한 버전이라고 합니다.

저는 일반 버전을 사용했습니다.(왼쪽이 일반입니다.)

실행을 하면 아래와 같이 나옵니다.

데이터베이스를 만들기 위해 새 데이터베이스를 클릭합니다.

자신에게 필요한 정보를 넣습니다.

NN은 NotNull입니다. 비어있을 경우 레코드가 생성되지 않습니다.

PK는 Primary key입니다. 레코드의 식별자 역할을 하며 단 1개의 값만이 존재 가능합니다.

AI는 Autoincrement입니다. 자동으로 값이 증가합니다.

U는 Unique입니다. 단 1개의 값만이 존재할 수 있습니다.

(PK와는 다릅니다. PK는 PK 만으로 다른 값들을 구분할 수 있습니다.)

DB를 만드셨으면

테이블을 확인해보도록 합시다.

 

테스트를 해야 하기 때문에 값들을 추가해보도록 하겠습니다.

저는 이렇게 추가를 해보겠습니다.

이렇게 만든 DB 파일을 Assets/StreamingAssets 폴더에 집어넣습니다.

폴더가 없다면 생성합니다.


3. 스크립트(Script) 작성(코딩)

일단 아래 코드를 추가해줍니다.

using System;

using System.Data;

using Mono.Data.SqliteClient;

using System.IO;

using UnityEngine.Networking;

 


3-1 DB 이동하기

처음에 작성해야 할 부분은 DB의 위치를 옮기는 것입니다.

StreamingAssets 파일은 Read Only이기 때문에 쓰기 작업을 할 수가 없습니다.

따라서 Assets 밑으로 DB를 복사해서 옮기는 작업이 필요합니다.

또한 플랫폼마다 위치가 다릅니다. 그에 따른 코드를 작성해야 합니다.

 

 

(사진이 보이지 않는다면 클릭해주세요)

주석을 달아놓았지만 코드에 대해 설명해드리겠습니다.

사용하는 플랫폼에 따른 경로를 다르게 설정해주어야 합니다.

저는 Android와 PC로 해서 구분을 지었습니다.

경로상에 DB 파일이 있을 때는 파일을 옮기는 코드는 실행되지 않습니다.

안드로이드 플랫폼일 경우 파일을 옮길 때 UnityWebRequest 클래스를 이용합니다.

파일이 복사되는 동안 기다렸다가 복사가 완료되면 이동을 하게 됩니다.

PC 플랫폼일 경우 간단하게 옮길 수 있습니다.

아이폰의 경우는 제가 해보지 않아서 잘 모르겠습니다.

나중에 해본다면 추가하도록 하겠습니다.

Canvas에 Text를 올려두고 연결하여 DB가 생성되면 표시하도록 설정했습니다.

(이 부분을 모르시겠다는 분이 있다면 내용을 추가해드리겠습니다만...

모르시는 분이 이 글을 읽지는 않을 것 같네요)

 


3-2 연결 상태 확인하기

이제 파일이 옮겨졌으니 파일이 생긴 경로를 얻어오는 함수를 만들겠습니다.

 

 

플랫폼에 따라 경로를 str에 저장하고 반환하는 함수입니다.

다음은 DB 연결 상태를 확인하는 코드를 짜보겠습니다.

테스트하실 때만 사용하시면 됩니다.

Debug.Log로 찍으셔도 무방합니다.

DB가 이상 없이 연결됐다면 아래와 같이 나옵니다.


3-3 DB 읽어오기

다음은 DB를 읽어오는 코드입니다.

크게 눈에 띄는 부분은 없습니다.

저는 읽어올 때 인덱스를 줘서 얻어왔는데요.

저렇게 하면 테스트할 때는 괜찮은데 유동적으로 쓸 때는 좋지 않습니다.

Field Count를 이용해서 하시면 에러를 줄이실 수 있습니다.

이제 코드를 실행해보겠습니다.

아까 데이터베이스에 넣은 내용과 똑같이 출력됐습니다.


3-4 DB 삽입, 삭제, 수정

아래는 DB 삽입 실행입니다.

Insert를 실행하고 다음 DB 내용을 전부다 읽어와서 Debug.Log 했습니다.

전부 이상 없이 출력됐습니다.

함수에다가 Insert라고 썼지만 저기에 쿼리를 어떻게 적느냐에 따라서

삽입 삭제 수정이 가능합니다.

쿼리문을 쓰는 간단한 내용은 밑에 설명하도록 하겠습니다.


4. 쿼리의 이해

DB 혹은 쿼리에 대해 공부를 안 하셨다면 쿼리가 어려우실 수 있습니다.

그래서 간단하게 설명해드리도록 하겠습니다.


4-1 읽기

DB를 읽어올 때는 Select 필드명 From 테이블 이름 Where 조건문

순으로 입력을 하게 됩니다.(Where 절은 생략 가능합니다.)

위를 예시로 들겠습니다. Select * From test라고 입력했습니다.

Select * 은 모든 필드를 뜻하게 됩니다.

From test는 test 테이블에서라는 뜻입니다.

(파일명이 아닙니다. 테이블명입니다.)

그렇다면 저 내용은 test 테이블의 모든 내용을 출력해 달라는 뜻이 됩니다.

Select NICKNAME From test라고 하게 된다면

test 테이블의 NICKNAME 필드만 보여주게 됩니다.

조건문을 추가해보겠습니다

Select * From test Where ID = "멍토"

이 쿼리는 test 테이블에서 ID가 멍토인 레코드를 보여달라는 뜻입니다.

이것을 응용하여서 읽어오시면 됩니다.


4-2 삽입

삽입의 기본 쿼리는 Insert Into 테이블명(필드명1, 필드명 2, 필드명 3) VALUES(필드 1값, 필드 2값, 필드 3값)입니다.

예시를 보겠습니다.

Insert Into test(USERNUMBER, ID, NICKNAME) VALUES(4, "멍토", "멍청한토끼")

이 쿼리는 test 테이블에 USERNUMBER ,ID, NICKNAME 부분에 4, 멍토, 멍청한토끼의 레코드를 추가하겠다는 뜻입니다.

필드의 개수는 조절이 가능합니다. Null 값이 허용된다면 USERNUMBER 필드 하나만 넣고 추가도 가능하단 뜻입니다.


4-3 삭제

삭제의 기본 쿼리는 Delete From 테이블명 Where 조건입니다.

예시를 보겠습니다.

Delete From test라는 쿼리를 동작시키면

test 테이블에 모든 레코드를 삭제하라입니다.

조건문을 추가해보겠습니다.

Delete From test where ID = "멍토"

이 쿼리는 test 테이블에 ID가 멍토인 레코드를 삭제하라는 쿼리입니다.


4-4 수정

수정의 기본 쿼리는 Update 테이블명 SET 필드명 = 값 Where 조건문입니다.

예시를 들어보겠습니다.

Update test Set NICKNAME = "멍청한토끼" Where ID = "user1"

이라는 쿼리를 동작시키게 되면

test 테이블에 ID가 user1인 레코드의 NICKNAME을 멍청한토끼로 바꿔라입니다.

 

이상으로 Unity와 Sqlite 연동에 대한 글을 마치겠습니다.

댓글

💲 광고입니다.