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}