본문 바로가기
유니티 게임 개발/오류&개발TIP

[TIP #3] 유니티에 DB 사용하기 (MYSQL 사용하기-Insert, Update, Select-)

by 헝탱 2017. 2. 7.
반응형



안녕하세요. 헝탱입니다.


오늘은 MYSQL을 이용해 유니티의 데이터를 저장하는 방식을 알려드릴려고 합니다.


그전에 많은 설정이 필요합니다.


하지만 저도 시놀로지 나스를 이용한 DB를 구축해서 보통 돌아다니는 구축과 다른 방법을 사용합니다.


그래서 구축 부분은 따로 시놀로지 사용법 부분에 적으려 합니다.


(현재는 글이 없는데 조만간 시간이 나면 적도록 하겠습니다.)



 1  준비가 되어 있어야 하는 작업


1). PHPMYADMIN으로 MYSQL을 사용이 가능한 상태 

(외부접근권한 및 포트포워딩 등 접속이 가능한 상태)


2). MYSQL의 DLL을 유니티에 적용한 상태 

( 참고 : http://yourpresence.tistory.com/79 )


1번과 2번의 과정이 모두 되어 있다면 본격적으로 사용할 준비가 되어 있는 상태 입니다.


안 되어 있다면 설정하는 방법을 제가 미리 올려놨으면 좋았겠지만


엄청 복잡하고 설정할게 많다면 많고 쉽게 글을 적는게 어려운 일이라 다른분들의 글을 보고


MYSQL + PHPMYADMIN 구축방법을 검색해 우선은 하시는 방법 밖에 없습니다.


나중에 오시는 분들은 이 글이 수정되어 있는 상태로 보실 수 있겠죠?


바로 다음으로 넘어가면!



 2  클래스 파일 만들기


저는 클래스 파일을 따로 만들어 사용했습니다.


클래스를 따로 만들면 내가 필요한 곳에 클래스를 불러와 잠시 사용하고


다시 할당을 해제 할 수 있기 때문에 클래스화 시켰습니다.


c#을 공부 하신 분이라면 new를 이용해 객체를 생성 시킬수 있다는것을 알고 있을텐데요.


유니티에서는 MonoBehaviour가 상속된 클래스는 new를 사용하면


노란색 경고가 엄청나게 나옵니다.


예를 들면 clsFunction Func = new clsFunction(); 이런 선언을 유니티에서 할 수 없죠.


그렇다고 못 쓰는건 아니였던 것 같은데 저는 노란색이 알림이 보기 싫어서


스크립트를 만들고 나서 클래스 뒤에 상속으로 표시된 MonoBehaviour을 지워서 사용했습니다.


아래부터 보다가 이상하다 싶으면 이 부분을 안 읽고 넘어가신거라 생각됩니다.



 3  전처리구문 추가


C#에서 MYSQL을 사용하려면 파일만 넣으면 안되고


이 스크립트에서 MYSQL을 사용하겠다는 전처리구문을 넣어야 하는데요.


아래의 구문들을 넣으면 됩니다.


1
2
3
using System.Data;     //C#의 데이터 테이블 때문에 사용
using MySql.Data;     //MYSQL함수들을 불러오기 위해서 사용
using MySql.Data.MySqlClient;    //클라이언트 기능을사용하기 위해서 사용
cs


설명을 하면 1번은 제가 MYSQL데이터를 DataTable형태로 사용하기 때문에 선언했습니다.


다른 형식을 사용할 분들은 다른거 사용하시면 됩니다.


그렇게 중요한 부분은 아닙니다.


2번째 줄은 MYSQL함수들을 사용하기 위해서 사용하구요.


3번째 줄은 딱히 없어도 되지만 "MySqlClient.[함수명]" 이런식으로 매번 붙이기 귀찮아서


추가적으로 선언한 부분입니다.



 4  MYSQL에 접속/접속해제 만들기


우선 MYSQL의 명령어를 사용하기 위해서는 아래와 같이 했습니다.


접속/접속해제를 다로 만들 필요는 없지만 저는 따로 만들었습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    MySqlConnection sqlconn = null;
    private string sqlDBip = "DB아이피";
    private string sqlDBname = "DB네임";
    private string sqlDBid = "관리자계정ID";
    private string sqlDBpw = "관리자계정비번";
 
    private void sqlConnect()
    {
        //DB정보 입력
        string sqlDatabase = "Server="+ sqlDBip + ";Database=" + sqlDBname + ";UserId=" + sqlDBid + ";Password=" + sqlDBpw + "";
 
        //접속 확인하기
        try
        {
            sqlconn =  new MySqlConnection(sqlDatabase);
            sqlconn.Open ();
                Debug.Log("SQL의 접속 상태 : "+sqlconn.State); //접속이 되면 OPEN이라고 나타남
        }
        catch(Exception msg) 
        {
            Debug.Log (msg); //기타다른오류가 나타나면 오류에 대한 내용이 나타남
        }
    }
 
    private void sqldisConnect()
    {
        sqlconn.Close();
        Debug.Log("SQL의 접속 상태 : " + sqlconn.State); //접속이 끊기면 Close가 나타남 
    }
cs


차근차근 설명해드리면


1번줄 : MYSQL과 C#을 연결해주는 컨넥션 변수입니다. 


DB정보를 여기에 넣어서 "Open()" 함수를 사용하면


MYSQL과 연결됩니다.


2~5번줄 : 10번 줄에 SQL과 접속하기 위해서 DB의 정보를 적어야 하는 부분이 있습니다.


보기 쉽게 하기 위해서 각각 내용에 대해서 변수를 지정해 나눈 부분이구요.


10번 줄을 그냥 해당 변수에 해당하는 부분을 적으면 1줄로 나타낼 수 도 있습니다.


DB네임은 테이블 네임이 아닌 PHPMYADMIN에서 만든 DB를 말합니다.


그림으로 보여주면 아래와 같은 위치에 있는 DB들을 말합니다.



7~23번줄 : SQL에 접속하는 함수를 만든 부분으로 


15번줄에 해당하는 부분이  MySqlConnection에 위에 여러개로 나눈 변수들을


sqlDatabase에 묶어서 정보를 입력하는 부분이고 


MySqlConnection정보가 저장된 "sqlconn"에 open과 close 함수를 사용하게 되면


연결과 연결해제가 됩니다.


그렇게 25~29번줄도 해제 함수를 만들어서 사용했습니다.


그리고 디버그로 해당 정보가 연결되었는지 확인 가능합니다.


19~22번줄 : 이 구간에 있는 부분이 돈다면 여러가지 이유로 오류가 있을 텐데요.


보통은 오류메시지에 나타납니다. 검색하면 바로 나오는데 간단하게 종류를 알려드리면


1). DLL파일이 잘못되었다.

2). 계정이 잘못되었다. (관리자 계정이 아님)

3). 접근 권한이 없다. (계정의 접근권한, 주소가 잘못되었다.)

....등 여러가지가 있습니다.


이중에 1번은 여기서 참고 하시면 됩니다. "http://yourpresence.tistory.com/79"


나머지는 검색해보시면 됩니다. 


사실 저도 이 부분을 주먹구구 식으로 해서 정리가 필요합니다.


나중에 정리해서 올리도록 하겠습니다.


이렇게하면 기본적으로 접속과 해제는 완료가 되었습니다.



 5  실제로 사용하기


실제로 사용하기 위해서는 여러가지 방법이 있습니다.


우선은 최종적인 사용법은 나중에 설명드리고 


해당 클래스에 선언되어야할 함수부터 설명드리면


1
2
3
4
5
6
7
8
9
    public void sqlcmdall(string allcmd) //함수를 불러올때 명령어에 대한 String을 인자로 받아옴
    {
        sqlConnect(); //접속
 
        MySqlCommand dbcmd = new MySqlCommand(allcmd, sqlconn); //명령어를 커맨드에 입력
        dbcmd.ExecuteNonQuery(); //명령어를 SQL에 보냄
 
        sqldisConnect(); //접속해제
    }
cs


같은 클래스에 해당 함수를 선언하면 INSERT와 UPDATE구문은 해당 함수로 모두 사용이 가능합니다.


하지만 SELECT는 데이터를 찾아서 가져오는 것 이기 때문에 리턴값을 가집니다.


1
2
3
4
5
6
7
8
9
10
11
    public DataTable selsql(string sqlcmd)  //리턴 형식을 DataTable로 선언함
    {
        DataTable dt = new DataTable(); //데이터 테이블을 선언함
 
        sqlConnect();
        MySqlDataAdapter adapter =  new MySqlDataAdapter(sqlcmd, sqlconn);
        adapter.Fill(dt); //데이터 테이블에  채워넣기를함
        sqldisConnect();
 
        return dt; //데이터 테이블을 리턴함
    }
cs


이와 같이 선언한다면 SELECT구문도 사용이 가능합니다.


사실 sqlallcmd 함수에 반환을 섞어서 넣어도 상관없는데 좀 더 간결하고 직관적으로 보여주기 위해서 나눴습니다.


추가된점은 SELECT에는 커맨드가 아닌 어댑터를 사용해서 접속해서 데이터를 가져오는 개념으로 사용되구요.


DataTable로 반환하기 때문에 객체 선언하였고 7번줄을 보면 가져온 데이터를 DataTable변수에 삽입합니다.


그렇게 적용된 데이터테이블을 리턴하면 사용할 준비가 완료 되었습니다.


실제로 사용하는 코드를 보시면 아래와 같습니다.


(+추가) 해당 코드는 다른 C# 스크립트를 만들고 사용하셔야 하고 4번줄에서 DataTable이라는 형식으로 저장하는 부분입니다.


다른 방식으로 리턴값을 바꿔서 사용하실분은 위에 있는 c# 스크립트에서 리턴된는 형식을 바꿔서 사용하시면 되겠습니다.


1
2
3
4
clsMysqlDB mysqlDB = new clsMysqlDB(); //클래스 선언
 
mysqlDB.sqlcmdall("SQL구문을 적으면 됩니다. (UPDATE, INSERT 구문 사용)");
DataTable dt = mysqlDB.selsql("SQL구문을 적으면 됩니다. (SELECT구문 사용)'");
cs


우선은 클래스를 선언해주셔야 하구요.


그 클래스 안에 적어놓은 함수를 불러와서 사용하면 됩니다.


2개의 함수를 따로 만들었기 때문에 각가 사용성에 맞게 사용해주시면 됩니다.




 6  SQL구문 기초


제가 적는 내용은 엄청 기초적인 내용만 적는 부분이니 더 많은 기능을 원하시는 분은


검색하면 잘나옵니다.



1) INSERT 구문


삽입 구문은 새로운 필드를 삽일 할때 사용합니다.


아래와 같은 요소로 구분이 됩니다. (") 표시는 설명 부분


INSERT INTO "테이블명" VALUES (' "필드명1" ', ' "필드명2" ')


이게 기본이구요.


필드가 생성된 순서대로 나열이 되어있습니다.


원하는 필드명만 삽입하고 싶다면 검색해서 알아보세요.



2) UPDATE 구문


업데이트 구문은 기존에 있는 필드의 데이터를 업데이트 할때 사용합니다.


아래와 같은 요소로 구분이 됩니다. (") 표시는 설명 부분


UPDATE "테이블명" SET "컬럼명"=' "세팅할데이터" ' WHERE "검색컬럼명"=' "컴럼데이터검색" '


검색컬럼명과 컬럼데이터검색은 해당 컬럼에서 해당 컬럼데이터를 포함안 내용을 모두 검색할 때 사용합니다.


WHERE을 붙이지 않고 사용하면 모든 데이터가 셋팅할 데이터로 바뀌게 됩니다.



3) SELECT 구문


셀렉트 구문은 기존에 있는 필드에서 원하는 데이터를 가져올때 사용합니다.


아래와 같은 요소로 구분이 됩니다. (") 표시는 설명 부분


SELECT "나타낼 컬럼명" FROM "테이블명" WHERE "검색컬럼명"=' "컴럼데이터검색" '


검색컬럼명과 컬럼데이터검색은 해당 컬럼에서 해당 컬럼데이터를 포함안 내용을 모두 검색할 때 사용합니다.


나타낼 컬럼명에 * 을 넣으면 모든 컬럼을 보여주고 


WHERE에서는 검색한 컬럼명과 데이터가 일치한 데이터들을 검색해 가져오게 됩니다.



SQL은 여러가지 많은 기능들이 있으니 원하시면 꼭 SQL구문에 대한 공부를 하시기 바랍니다.


어렵거나 이해가 안되는 부분이 있으시면 꼭 댓글로 달아주세요.

반응형

댓글