- Erlang教程
- Erlang - 主页
- Erlang - 概述
- Erlang - 环境
- Erlang - 基本语法
- Erlang-Shell
- Erlang - 数据类型
- Erlang - 变量
- Erlang - 运算符
- Erlang - 循环
- Erlang - 决策
- Erlang - 函数
- Erlang - 模块
- Erlang - 递归
- Erlang - 数字
- Erlang - 字符串
- Erlang - 列表
- Erlang - 文件 I/O
- Erlang - 原子
- Erlang - 地图
- Erlang - 元组
- Erlang - 记录
- Erlang - 异常
- Erlang - 宏
- Erlang - 头文件
- Erlang - 预处理器
- Erlang - 模式匹配
- Erlang - 守卫
- Erlang-BIFS
- Erlang - 二进制文件
- Erlang - 乐趣
- Erlang - 进程
- Erlang - 电子邮件
- Erlang - 数据库
- Erlang - 端口
- Erlang - 分布式编程
- Erlang-OTP
- Erlang - 并发
- Erlang - 性能
- Erlang - 驱动程序
- Erlang - 网络编程
- Erlang 有用资源
- Erlang - 快速指南
- Erlang - 有用的资源
- Erlang - 讨论
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。
确保您已创建名为usersqlserver的 ODBC 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库的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}