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