오보에블로그

[Unity] Unity와 sqlite 연동하기 본문

GameEngine & CG/Unity

[Unity] Unity와 sqlite 연동하기

(OBO) 2022. 1. 21. 23:11
728x90

1. 참고 블로그

  • 멍토님께서 작성하신 포스트 가 정말 잘 설명되어 있어 해당 포스트를 참고해서 해결하였고, 기록을 위해 작성한다.

2. Sqlite 다운받기

3. 플러그인 파일 등록

  • 2 에서 다운로드 받은 파일을 압축해제하면 sqlite3.def , sqlite3.dll 파일을 유니티 프로젝트의 Assets/Plugins/에 올린다.( 없다면 폴더 생성)
  • 자신의 로컬 경로에서 Mono.Data.Sqlite.dllAssets/Plugins/에 올린다. 필자는 C:\Program Files\Unity\Hub\Editor\2020.3.19f1\Editor\Data\MonoBleedingEdge\lib\mono\4.5 이었음.
  • 안드로이도에서 사용하기위한 추가 파일도 Assets/Plugins/Android에 올린다. (아래 첨부한 zip 파일 참고)

Android.zip
0.56MB

4. DB 생성

  • https://sqlitebrowser.org/dl/ 에서 DB Browser 를 다운받는다.
    • 새 데이터 베이스 생성
      • NN : NotNull
      • PK : Primary key
      • AI: Autoincrement
      • U : Unique
    • 데이터 보기 > 새 레코드 를 통해 튜플 생성
  • 만든 파일을 Assets/StreamingAssets 에 복사

5. 유니티 스크립트 작성

// DB 위치 이동
void DBCreate()
{
    string filepath = string.Empty;
    if (Application.platform == RuntimePlatform.Android)
    {

        filepath = Application.persistentDataPath + "/[filename].db";

        if (!File.Exists(filepath))
        {
            UnityWebRequest unityWebRequest = UnityWebRequest.Get("jar:file://" + Application.dataPath + "!/assets/[filename].db");
            unityWebRequest.downloadedBytes.ToString();
            while (!unityWebRequest.SendWebRequest().isDone) { }
            File.WriteAllBytes(filepath, unityWebRequest.downloadHandler.data);
        }
    }
    else
    {
        filepath = Application.dataPath + "/DiceInfo.db";
        if(!File.Exists(filepath))
        {
            Debug.Log($"{File.Exists(filepath)}");
            File.Copy(Application.streamingAssetsPath + "/[filename].db", filepath);
        }
        Debug.Log($"{File.Exists(filepath)}");
    }
}
// DB file path 불러오기
public string GetDBFilePath()
{
    string str = string.Empty;
    if(Application.platform == RuntimePlatform.Android)
    {
        str = "URI=file:" + Application.persistentDataPath + "/[filename].db";
    }
    else
    {
        str = "URI=file:" + Application.dataPath + "/[filename].db";
    }
    return str;
}
// DB 읽어오기
public void DataBaseRead(string query)
{
    IDbConnection dbConnection = new SqliteConnection(GetDBFilePath());
    dbConnection.Open();
    IDbCommand dbCommand = dbConnection.CreateCommand();
    dbCommand.CommandText = query;
    IDataReader dataReader = dbCommand.ExecuteReader();

    while (dataReader.Read())
    {
        생성한 데이터 베이스 형식에 맞게 출력
        Debug.Log($"{dataReader.GetString(0)}");
    }
    dataReader.Dispose();
    dataReader = null;
    dbCommand.Dispose();
    dbCommand = null;
    dbConnection.Close();
    dbConnection = null;
}
728x90