Erlang-databases

提供:Dev Guides
移動先:案内検索

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にアクセスするように設定されています。
  • データベースへのODBC接続を作成する usersqlserver という名前のODBC DSNを作成したことを確認します

接続の確立

データベースへの接続を確立するには、次のコード例を使用できます。

-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ライブラリのstartメソッドは、データベース操作の開始を示すために使用されます。
  • 接続方法では、接続するために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 というテーブルが作成されていることがわかります。

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

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

次の例は、従業員テーブルにレコードを挿入します。 テーブルが正常に更新されると、レコードとステートメントは更新されたレコードの値と更新されたレコードの数を返します。

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

したがって、最後のセクションの挿入コマンドが機能し、選択コマンドが正しいデータを返したことを確認できます。

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

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}