📅  最后修改于: 2020-11-04 05:58:55             🧑  作者: Mango
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,该DSN创建了与数据库的ODBC连接
要建立与数据库的连接,可以使用以下代码示例。
例
-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表中插入一条记录。如果表已成功更新,则记录和语句将返回已更新记录的值和已更新的记录数。
例
-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}