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