Erlang-데이터베이스

Erlang은 SQL Server 및 Oracle과 같은 기존 데이터베이스에 연결할 수 있습니다. 얼랭에는inbuilt odbc library 데이터베이스 작업에 사용할 수 있습니다.

데이터베이스 연결

이 예에서는 Microsoft SQL Server를 사용합니다. Microsoft SQL Server 데이터베이스에 연결하기 전에 다음 포인터가 확인되었는지 확인하십시오.

  • TESTDB 데이터베이스를 만들었습니다.

  • TESTDB에 EMPLOYEE 테이블을 작성했습니다.

  • 이 테이블에는 FIRST_NAME, LAST_NAME, AGE, SEX 및 INCOME 필드가 있습니다.

  • 사용자 ID "testuser"및 비밀번호 "test123"은 TESTDB에 액세스하도록 설정됩니다.

  • ODBC DSN을 만들 었는지 확인하십시오. usersqlserver 데이터베이스에 대한 ODBC 연결을 생성합니다.

연결 설정

데이터베이스에 대한 연결을 설정하려면 다음 코드 예제를 사용할 수 있습니다.

Example

-module(helloworld). 
-export([start/0]). 

start() ->
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver;UID = testuser;PWD = test123", []), 
   io:fwrite("~p",[Ref]).

위 프로그램의 출력은 다음과 같습니다.

Output

<0.33.0>

위 프로그램에 대해 다음 사항에 유의해야합니다.

  • odbc 라이브러리의 시작 방법은 데이터베이스 작업의 시작을 나타내는 데 사용됩니다.

  • 연결 방법을 사용하려면 DSN, 사용자 이름 및 암호가 필요합니다.

데이터베이스 테이블 생성

데이터베이스에 연결 한 후 다음 단계는 데이터베이스에 테이블을 만드는 것입니다. 다음 예제는 Erlang을 사용하여 데이터베이스에 테이블을 만드는 방법을 보여줍니다.

Example

-module(helloworld). 
-export([start/0]). 

start() -> 
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver; UID = testuser;PWD = test123, []), 
   odbc:sql_query(Ref, "CREATE TABLE EMPLOYEE (FIRSTNAME char varying(20), 
   LASTNAME char varying(20), AGE integer, SEX char(1), INCOME integer)")

이제 데이터베이스를 확인하면 다음과 같은 테이블이 표시됩니다. EMPLOYEE 생성됩니다.

데이터베이스에 레코드 삽입

데이터베이스 테이블에 레코드를 만들 때 필요합니다.

다음 예제는 직원 테이블에 레코드를 삽입합니다. 테이블이 성공적으로 업데이트되면 레코드와 문이 업데이트 된 레코드의 값과 업데이트 된 레코드 수를 반환합니다.

Example

-module(helloworld). 
-export([start/0]). 

start() -> 
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver; UID = testuser;PWD = test123", []), 
   io:fwrite("~p",[odbc:sql_query(Ref, 
   "INSERT INTO EMPLOYEE VALUES('Mac', 'Mohan', 20, 'M', 2000)")]).

위 프로그램의 출력은 다음과 같습니다.

Output

{updated,1}

데이터베이스에서 레코드 가져 오기

Erlang은 데이터베이스에서 레코드를 가져 오는 기능도 있습니다. 이것은sql_query method.

다음 프로그램에 예가 나와 있습니다.

Example

-module(helloworld). 
-export([start/0]). 

start() ->
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver; UID = testuser;PWD = test123", []), 
   io:fwrite("~p",[odbc:sql_query(Ref, "SELECT * FROM EMPLOYEE") ]).

위 프로그램의 출력은 다음과 같습니다.

Output

{selected,["FIRSTNAME","LASTNAME","AGE","SEX","INCOME"],
[{"Mac","Mohan",20,"M",2000}]}

따라서 마지막 섹션의 삽입 명령이 작동하고 선택 명령이 올바른 데이터를 반환했음을 알 수 있습니다.

매개 변수를 기반으로 데이터베이스에서 레코드 가져 오기

Erlang은 특정 필터 기준에 따라 데이터베이스에서 레코드를 가져 오는 기능도 있습니다.

예는 다음과 같습니다-

Example

-module(helloworld). 
-export([start/0]). 

start() -> 
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN=usersqlserver; UID=testuser;PWD=test123", []), 
   io:fwrite("~p",[ odbc:param_query(Ref, "SELECT * FROM EMPLOYEE WHERE SEX=?", 
   [{{sql_char, 1}, ["M"]}])]).

위 프로그램의 출력은 다음과 같습니다.

Output

{selected,["FIRSTNAME","LASTNAME","AGE","SEX","INCOME"],
         [{"Mac","Mohan",20,"M",2000}]}

데이터베이스에서 레코드 업데이트

Erlang은 데이터베이스에서 레코드를 업데이트하는 기능도 있습니다.

동일한 예는 다음과 같습니다.

Example

-module(helloworld). 
-export([start/0]). 

start() -> 
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver; UID = testuser;PWD = test123", []), 
   
   io:fwrite("~p",[ odbc:sql_query(Ref, "
      UPDATE EMPLOYEE SET AGE = 5 WHERE INCOME= 2000")]).

위 프로그램의 출력은 다음과 같습니다.

Output

{updated,1}

데이터베이스에서 레코드 삭제

Erlang은 데이터베이스에서 레코드를 삭제하는 기능도 있습니다.

동일한 예는 다음과 같습니다.

Example

-module(helloworld). 
-export([start/0]). 

start() -> 
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver; UID = testuser;PWD = test123", []), 
   io:fwrite("~p",[ odbc:sql_query(Ref, "DELETE EMPLOYEE WHERE INCOME= 2000")]).

위 프로그램의 출력은 다음과 같습니다.

Output

{updated,1}

테이블 구조

Erlang에는 테이블 구조를 설명하는 기능도 있습니다.

예는 다음과 같습니다-

Example

-module(helloworld). 
-export([start/0]). 

start() -> 
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver; UID = testuser;PWD = test123", []), 
   io:fwrite("~p",[odbc:describe_table(Ref, "EMPLOYEE")]).

위 프로그램의 출력은 다음과 같습니다.

Output

{ok,[{"FIRSTNAME",{sql_varchar,20}},
   {"LASTNAME",{sql_varchar,20}},
   {"AGE",sql_integer},
   {"SEX",{sql_char,1}},
   {"INCOME",sql_integer}]}

기록 수

Erlang은 또한 테이블에있는 레코드의 총 개수를 가져 오는 기능이 있습니다.

동일한 예가 다음 프로그램에 나와 있습니다.

Example

-module(helloworld). 
-export([start/0]). 

start() ->
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver; UID = sa;PWD = demo123", []), 
   io:fwrite("~p",[odbc:select_count(Ref, "SELECT * FROM EMPLOYEE")]).

위 프로그램의 출력은 다음과 같습니다.

{ok,1}