当前位置: 首页 > 文档资料 > Erlang 中文教程 >

数据库 Databases

优质
小牛编辑
126浏览
2023-12-01

Erlang能够连接到传统的数据库,如SQL Server和Oracle。 Erlang有一个inbuilt odbc library ,可用于处理数据库。

数据库连接 (Database Connection)

在我们的示例中,我们将使用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连接

建立连接

要建立与数据库的连接,可以使用以下代码示例。

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方法用于指示数据库操作的开始。

  • connect方法需要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}]}

因此,您可以看到上一部分中的insert命令有效,而select命令返回了正确的数据。

基于参数从数据库中获取记录

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}