Erlang-データベース

Erlangには、SQLServerやOracleなどの従来のデータベースに接続する機能があります。Erlangにはinbuilt odbc library データベースの操作に使用できます。

データベース接続

この例では、Microsoft SQLServerを利用します。Microsoft SQL Serverデータベースに接続する前に、次のポインタがチェックされていることを確認してください。

  • データベースTESTDBを作成しました。

  • TESTDBにテーブルEMPLOYEEを作成しました。

  • このテーブルには、フィールドFIRST_NAME、LAST_NAME、AGE、SEX、およびINCOMEがあります。

  • TESTDBにアクセスするためのユーザーID「testuser」とパスワード「test123」が設定されています。

  • と呼ばれるODBCDSNを作成したことを確認します 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ライブラリのstartメソッドは、データベース操作の開始を示すために使用されます。

  • 接続方法では、接続するために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 作成されます。

データベースへのレコードの挿入

レコードをデータベーステーブルに作成する場合に必要です。

次の例では、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}