상세 컨텐츠

본문 제목

[Unity] 유니티 SQLite 연동 관련

게임엔진관련/유니티 엔진

by AlrepondTech 2019. 7. 5. 11:34

본문

반응형

 

=================================

=================================

=================================

 

 

                       

Assets.zip
2.32MB

                                   파일>IOS대응, 안드로이드32,64bit대응

 

SQLite에 필요DLL과 안드로이드 SO 

새로나온 플러그인 DLL도 SQL 여기 파일 경로 대로 하면된다.. android 라이브러리는 android 폴더 만들고

따로 압축에 있는 경로대로 하면된다. 경로를 따로 지정한 이유는 그경로대로 해야 유니티자체에서 셋팅설정을 해준다.

따로 다른 셋팅을 또 해주고 싶으면 유니티 에디터에서 애셋경로에서 해당DLL파일을

직접 누루면 왼쪽에 설정이나오는데 여기에서 다르게 셋팅하면된다.

안드로이드와 유니티가 업데이트 될때마다 달라질수도 있으니.

이게되면 이거대로 하고 안되면 다른것들도 많이 참고하도록 하자.

(DLL,SO 파일도 또 버전업되면 바꾸어야 될수도 있다.)

(아직 아이폰은 이걸로 테스트 않해보았네요.)

 

 

=================================

=================================

=================================

 

 

 

출처: https://forum.unity.com/threads/system-data-sqlite-dllnotfoundexception.139323/

 

For communicate with sqlite DB u required below references in ur code:

using System.IO;
using System.Data;
using Mono.Data.SqliteClient;

and u have to change in Edit>>Project settings>>player setting : Optimization : API Compitability Level to .Net 2.0.

 

 

=================================

=================================

=================================

 

 

 

출처: https://forum.unity.com/threads/cant-load-system-data-dll.523131/

 

I'm pretty new to Unity but starting to understand how it works.

I've downloaded the last Unity (2018.1) and changed the scripting runtime version to 4.x.

But I can't find which System.Data.dll I should include in my project (I need it for my System.Data.SQLite library that I compiled).

If I check in Unity's folders There are a lot of folders in MonoBleedingEdge/lib/mono : 4.0, 4.0-api, 4.5, 4.5.1-api ...

I tried with a few System.Data.dll found in those folders and made sure to use a dll with the same version as the one used to compile my System.Data.SQLite library.

But I always get that "Loading script assembly "Assets/Plugins/System.Data.dll" failed!" when I run my game. Do you know why ? Or is there a possibility to have more details (like version of the dll expected)

Thank you for your help

 

------------------------------------------------------------------------------------------------------------------------------------------------------

 

I got it working a few minutes ago, I had to take the System.Data.dll from this path:
"C:\Program Files\Unity\Editor\Data\MonoBleedingEdge\lib\mono\unityjit"

The System.Data.dll in this path tagets 4.X .net and can be added to unity Plugins folder

 

 

 

=================================

=================================

=================================

 

 

 

 

출처: https://cafe.naver.com/swoows?iframe_url=/ArticleRead.nhn%3Fclubid=12259724%26page=1%26inCafeSearch=true%26searchBy=0%26query=sqlite%26includeAll=%26exclude=%26include=%26exact=%26searchdate=all%26media=0%26sortBy=date%26articleid=672%26referrerAllArticles=true

 

다른 자료들 보면 dll을 왕창 추가해서 최종 바이나리 용량이 증가하기 때문에 용량을 줄이고자 만든 라이브러리& 샘플입니다.

 

아이폰, 윈 or 맥의 editor에서는 플러그인 필요없고 android 폰에서만 플러그인 사용합니다.

 

윈, 맥, 아이폰, 안드로이드폰에서 정상 작동합니다.

 

*주의사항

1. 안드로이드 setting에서 Write Access는 External(SDCard)로 할것

2. 확장자는 꼭 .bytes를 사용하셔야 합니다

 

아래 사이트는 ios에 대해서만 있어서 안드로이드에서 작동하게하고 샘플 만듬

참조 :

http://gamesforsoul.com/2012/03/sqlite-unity-and-ios-a-rocky-relationship/

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------

 

http://forum.unity3d.com/threads/using-plugins-for-x86-and-x86_64-architectures-issue-with-sqlite3-dll-in-beta-9-solved.276719/

유니티5에서 64bit를 지원하기 때문에 sqlite3.dll을 32bit, 64bit를 구분해서 알맞은 폴더에 넣어줘야 함

 

 

 

=================================

=================================

=================================

 

 

 

출처: https://nopublisher.dev/archives/270

 

 

https://www.sqlite.org/download.html
여기에서 컴파일된 바이너리 64비트를 다운, 유니티 폴더
Program Files\Unity\Editor\Data\Mono\lib\mono\2.0
여기에서 Mono.Data.sqlite 랑 System.Data를 유니티 Asset폴더 안에 Plugins 폴더를 생성 뒤 박는다.

StreamingAssets 폴더를 asset 폴더 안에 만들고 그 안에다가 만든 db를 박는다.

using Mono.Data.Sqlite;
using System.Data;

인클루드하고

 

static string conn = "URI=file:" + Application.streamingAssetsPath + "/DB.db";
static IDbConnection dbconn = (IDbConnection)new SqliteConnection(conn);
static IDbCommand dbcmd = dbconn.CreateCommand();

 

하고 오픈 

 

 

=================================

=================================

=================================

 

 

 

출처: https://m.blog.naver.com/PostView.nhn?blogId=algorithmlab&logNo=220877671743&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

Unity 5 (유니티 5) 에서 SQLite DB (데이터베이스) 연동하기

1. SQLITE를 설치하자 (생략) (오라클로 치면 오라클 본체)
2. DB Browser for SQLite를 설치하자 (생략) (오라클의 토드에 해당하는 툴)

3. 데이터베이스 Database DB 를 작성한다.



4. SQLite와 Unity 연동을 위한 dll 파일들을 다운로드 받자.
https://forum.unity3d.com/threads/tutorial-how-to-integrate-sqlite-in-c.192282/

$SQLite dlls.zip

5. 압축을 풀고 자기가 작업하는 유니티 프로젝트 디렉토리에 

~~/Assets/Plugins 라고 애셋 폴더 밑에 Plugins 라는 이름으로 폴더를 하나 만든 후
(윈도우에서 만들지 말고 유니티 안에서 만든다)

dll 파일들을 애셋 형태로 Import 한다.


6. 프로젝트 디렉토리에

[db이름].db 파일을 생성(붙여넣기)한다. .db 파일은 아까 2번에서 새 데이터베이스 파일을 생성할 수 있다.


mystudy1.db 파일이 보이는가?

7. 테스트용 소스 코드를 입력한다.

 

 

using UnityEngine;
using System.Collections;

using System.Data;
using Mono.Data.SqliteClient;

public class DBManager : MonoBehaviour {

    // Use this for initialization
    void Start() {

    }

    // Update is called once per frame
    void Update() {

    }
    
    public void testFunc()
    {
        string result = "";

        string _constr = "URI=file:" + "mystudy1.db";
        IDbConnection _dbc;
        IDbCommand _dbcm;
        IDataReader _dbr;

        _dbc = new SqliteConnection(_constr);
        _dbc.Open();
        _dbcm = _dbc.CreateCommand();
        _dbcm.CommandText = "SELECT txt FROM mymytable WHERE id='" + "4" + "'"; // mymytable 테이블의 txt 칼럼의 값을 가져오는데, 조건은 id 칼럼의 값이 4이다.
        _dbr = _dbcm.ExecuteReader();

        //while (_dbr.Read())
        if (_dbr.Read()) // 결과 row가 하나일 때는 _dbr.Read() 한 번으로 끝난다.
        {
            //result = _dbr.GetInt16(0);
            result = _dbr.GetString(0); // 이제 현재 row의 0번째 칼럼의 값 결과물을 문자열로 받아온 것을 result 에 넣어준다.
        }

        //_dbr.NextResult(); // 만일 결과 row가 여러 줄일 때는 .NextResult() 메서드를 사용하여 다음 row를 다루도록 하자.

        내라벨.text = result; // 유니티 UI 라벨 () 의 캡션에 방금 받아온 스트링을 쏴준다.


        //+ 추가 (DB 닫는 용도)
        dbr.Close (); 
        dbr = null;
        dbcm.Dispose (); 
        dbcm = null; 
        dbc.Close (); 
        dbc = null; 
    }

}

 


8. 끝!! ^^*

 

 

=================================

=================================

=================================

 

 

 

반응형

 

728x90

 

 

 

출처:  https://teqoo.tistory.com/193

 

일단 Sqlite 파일을 받는다

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

 

나는 이걸로 받았다.

64-bit DLL (x64) for SQLite version 3.18.0.

 




 

 

 

받은 sqlite 압축파일의 압축을 풀어준다.

폴더안에 들어있는 

sqlite3.def

sqlite3.dll

파일을 

유니티 프로젝트 폴더 Assets/Plugins 안에 넣어준다. 

Plugins폴더가 없으면 새 Plugins폴더를 만들면 된다. 이름은 같게 해서 ㅇㅇ

 


 

DB관리를 위해

sqlitebrowser를 다운 받는다

https://github.com/sqlitebrowser/sqlitebrowser

 


DB 생성과정 사진

 

전 단계에서 받은 DB Browser for SQLite 프로그램을 이용해서

Unity 프로젝트 Assets폴더에 DB를 생성해준다.

 


 

 

C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0 ( 설치된 유니티 폴더 내 Editor\Data\Mono\lib\mono\2.0 )

폴더 안에 들은 

System.Data.dll

Mono.Data.Sqlite.dll

두 파일을 찾아서 유니티 프로젝트 Assets/Plugins 폴더안에 복사 붙여넣기 해준다.

 


 

 

이제 스크립트를 작성할 시간이다.

C# 스크립트 파일을 만들어주자

나는 DBAccess라는 C# 스크립트 파일을 만들었다.

 


 

using System;
using System.Data;
using Mono.Data.Sqlite;

네임스페이스에 using Mono.Data.Sqlite; using System.Data; using System; 를 추가해준다.

 


 

DBAccess

using UnityEngine;
using System;
using System.Data;
using Mono.Data.Sqlite;

public class DBAccess : MonoBehaviour
{
void Start ()
{
// conn = "URI=file:" + Application.dataPath + "/DB Browser로 만든 데이터베이스 이름.s3db";
string conn = "URI=file:" + Application.dataPath + "/BoxDB.s3db";

// IDbConnection
IDbConnection dbconn;
dbconn = (IDbConnection) new SqliteConnection(conn);
dbconn.Open(); //Open connection to the database.

// IDbCommand
IDbCommand dbcmd = dbconn.CreateCommand();
// sql문장 = "SELECT 조회할 컬럼 FROM 조회할 테이블";
string sqlQuery = "SELECT Box_id,Box_name FROM BOX";
dbcmd.CommandText = sqlQuery;

// IDataReader
IDataReader reader = dbcmd.ExecuteReader();
while ( reader.Read() )
{
// 변수타입은 컬럼 데이터 타입에 맞추면 된다.
int Box_id = reader.GetInt32(0);
string Box_name = reader.GetString(1);

Debug.Log("Box_id= " + Box_id + " Box_name =" + Box_name);
}

// 닫아주고 초기화 시켜주는 곳
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
dbconn.Close();
dbconn = null;
}
}

Start() 함수 내에서 

DB conn객체를 생성하고

원하는 작업을 할 수 있게 스크립트를 작성해준다.

//

 

 

SqliteException: SQLite error

no such table: Capsule

 

/DB Browser로 만든 데이터베이스 이름.s3db 로 스크립트를 작성했더니

테이블을 못 찾겠다는 오류가 발생했다.

이유는 왜인지 모르겠는데

확장자를 .s3db에서 .db로 바꾸니 실행이 되고

Box 테이블에서 데이터를 읽는다. 

 


 

추가로 지금 작성한 DBAccess 스크립트는

Main Camera에 넣어줬다

 


참고

 

Database (SQLite) Setup for Unity ( C# )

http://answers.unity3d.com/questions/743400/database-sqlite-setup-for-unity.html

 

SQLite and Unity ( JS )

http://wiki.unity3d.com/index.php/SQLite

 

SQLite4Unity3d ( C# )

http://codecoding.github.io/SQLite4Unity3d/



출처: https://teqoo.tistory.com/193 [테쿠의 개발 일기장]

 

 

 

=================================

=================================

=================================

 

 

 

출처: http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_QnA_etc&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=hit&desc=desc&no=2472

 

테이블을 만들고 sqlite로 db를 PC상에서 읽고 하는데는 문제가없습니다.

 

하지만 안드로이드로 빌드할때는 db를 못읽어오더라구요.. 

 

pc 에서는 URI=file:C:/Users/jude/AppData/LocalLow/DefaultCompany/sqlite4/ttt.db 기본적으로 이 path로 읽어옵니다.

 

현재사용중인dll은 (Mono.Data.Sqlite)

 

openDB 의 코드는

 

string connection = "URI=file:" + Application.persistentDataPath + "/" + connectionString;

string filepath = Application.persistentDataPath + "/" + connectionString;

 

이와 같습니다. 

 

여기서질문 안드로이드 및 아이폰디바이스에서 db를 읽어오고싶은데 안되는 문제가있습니다. db자체를 찾지못하더라구요.

빌드할때 db파일은 어디에 위치해야하는지... db파일 자체를 따로 유니티 프로젝트에서 강제로 읽어올수있는지 궁금합니다.

 

제작환경

unity4.0

Mono.Data.Sqlite.dll 사용중

 

도움을 요청합니다. ㅜㅜ

 

----------------------------------------------------------------------------------------------------------------------------------------------

 

 http://stackoverflow.com/questions/15700556/unity3d-iphone-sqlite-database-is-empty-when-launch-the-app-in-ios-device비슷한 글이 있네요. 2013-05-03
10:00:07
    저도 지금 같은 문제에 봉착했는데...혹시 해결하셨어요?? 2015-12-29
17:59:43
    http://cafe.naver.com/ArticleRead.nhn?clubid=12259724&page=1&inCafeSearch=true&searchBy=0&query=sqlite&includeAll=&exclude=&include=&exact=&searchdate=all&media=0&sortBy=date&articleid=672&referrerAllArticles=true

 

--------------------------------------------------------------------------------------------------------------------------------------------

 

다른 자료들 보면 dll을 왕창 추가해서 최종 바이나리 용량이 증가하기 때문에 용량을 줄이고자 만든 라이브러리& 샘플입니다.

 

아이폰, 윈 or 맥의 editor에서는 플러그인 필요없고 android 폰에서만 플러그인 사용합니다.

 

윈, 맥, 아이폰, 안드로이드폰에서 정상 작동합니다.

 

*주의사항

1. 안드로이드 setting에서 Write Access는 External(SDCard)로 할것

2. 확장자는 꼭 .bytes를 사용하셔야 합니다

 

아래 사이트는 ios에 대해서만 있어서 안드로이드에서 작동하게하고 샘플 만듬

참조 :

http://gamesforsoul.com/2012/03/sqlite-unity-and-ios-a-rocky-relationship/

 

 

 

=================================

=================================

=================================

 

 



출처: http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=59712

 

일단 해당 프로젝트의 Plugins 폴더 내에 있는 파일 리스트 

Mono.Data.Sqlite.dll

Mono.Data.SqliteClient.dll

MySql.Data.dll

sqlite3.dll

System.Data.dll

입니다.

 

빌드셋팅에서 쓰기권한 External로 했고, Api Compatibility Level도 .net2.0으로 바꿨습니다.

 

하나의 소스파일에 대하여 컴퓨터에서는 무리 없이 모든 기능이 되는데,

이것을 안드로이드(갤2)로 옮기면 문제가 발생합니다.

 

문제를 UI에 출력해본 결과는 다음과 같습니다.

SelectWhere(함수이름) Error : System.DllNotFoundException.sqlite3 at (wrapper managed to native)

Mono.Data.SqliteClient.Sqlite:sqlite3_prepare16(intptr,intptr,int,intptr&,intptr&) at Mono.Data.SqliteClient.SqliteCommand.GetNextStatement (IntPtr pzStart, System.IntPtr& pzTail, System.IntPtr& pStmt) [0x00000] in <filename unknown>:0 ...

 

아래로 더 있으나 무의미하다 판단하여 적지 않습니다.

찾아보니 필요한 dll 파일을 찾지 못한다고 하는데, 해결법을 알려주셨으면 합니다.

------------------------------------------------------------------------------------------------------------------------------------------------------

 

AtoZ 님이 남겨주신 링크를 보시면 모든 해결법이 나와 있는데;;; 

libsqlite3.so 이게 필요하실겁니다. 필요한 라이브러리도 안쓰고 계신데 되실리가 없죠 

AtoZ 님이 남겨주신 http://answers.unity3d.com/questions/872068/dllnotfoundexception-sqlite3.html 

여기 링크 다시 정독 해보셔요

 

 

=================================

=================================

=================================

 

 

 

출처: https://smilejsu.tistory.com/977

 

언제 또 SQLite를 사용할지 모르겠지만.. 일단 적어 둔다.

 

SQLite3 dll 을 찾을수 없다는 문구가 보이면 아래 링크에서 다운받으면댐.

 

https://sourceforge.net/projects/cyqlite/?source=typ_redirect

 

Plugins.zip
1.52MB

 

 

 

안드로이드 armeabi-v7a

libsqlite3.so
0.47MB

 

 

안드로이드 x86

libsqlite3.so
0.66MB

 

윈도우 x64

sqlite3.dll
0.85MB

 

윈도우 x86

sqlite3.dll
0.79MB



출처: https://smilejsu.tistory.com/977 [{ 일등하이 :Unity3D }]

 

 

=================================

=================================

=================================

 

 

 

* 기타관련링크

 

https://westwoodforever.blogspot.com/2014/01/unity3d-android-sqlite.html

 

https://dreamzelkova.tistory.com/entry/Unity%EC%99%80-SQLite%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

 

https://huiyoi.tistory.com/98

 

https://www.youtube.com/watch?v=BN1i4WvB8BY

 

 

=================================

=================================

=================================

 

 

반응형


관련글 더보기

댓글 영역