English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Erlang データベース

Erlangは、SQL ServerやOracleなどの伝統的なデータベースに接続できます。Erlangには内蔵のodbcライブラリデータベースを処理するためのツール。

データベース接続

私たちの例では、Microsoft SQL Serverを使用します。Microsoft SQL Serverデータベースに接続する前に、以下の指針を確認してください。

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

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

  • このテーブルにはFIRST_NAME、LAST_NAME、AGE、SEX、INCOMEというフィールドが含まれています。

  • ユーザーID“ testuser”とパスワード“ test123”をTESTDBに設定してください。

  • usersqlserverという名前のODBC DSNが作成され、データベースへのODBC接続が作成されていることを確認してください。

接続の確立

データベースに接続を建立するために、以下のコード例を使用できます。

Example

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

上記プログラムの出力は以下の通りです-

出力

<0.33.0>

上記のプログラムについて、以下の点に注意してください。

  • odbcライブラリの起動方法は、データベース操作の開始を指示します。

  • 接続方法にはDSN、ユーザー名、パスワードが必要です。

データベーステーブルの作成

データベースに接続した後の次のステップは、データベース内にテーブルを作成することです。以下の例では、Erlangを使用してデータベース内にテーブルを作成する方法を示します。

-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)")]).

上記のプログラムの出力は以下の通りです

{updated,1}

データベースからレコードを取得する

Erlangはデータベースからレコードを取得する能力も持っています。これはsql_queryメソッドで実現されています。

以下のプログラムでは、以下の例を示します:

-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") ]).

上記のプログラムの出力は以下の通りです:

出力

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

したがって、前節のinsertコマンドが機能し、selectコマンドが正しいデータを返したことがわかります。

パラメータに基づいてデータベースからレコードを取得する

Erlangは特定のフィルタ条件に基づいてデータベースからレコードを取得する機能も持っています。

一つの実例として以下の通りです

-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"]}])]).

上記のプログラムの出力は以下の通りです

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

データベースからレコードを更新する

Erlangはデータベースからレコードを更新する機能も持っています。

以下の同じ例を示します:

-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")]).

上記のプログラムの出力は以下の通りです

{updated,1}

データベースからレコードを削除する

Erlangはデータベースからレコードを削除する機能も持っています。

以下の同じ例を示します

-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")]).

上記のプログラムの出力は以下の通りです:

{updated,1}

テーブル構造

Erlangはテーブル構造を説明する機能も持っています。

一つの実例として以下の通りです

-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")]).

上記のプログラムの出力は以下の通りです:

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

レコード数

Erlangはテーブルのレコード数を取得する機能も持っています。

以下のプログラムでは同じ例を示しています。

-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}