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

Base de datos en Erlang

Erlang puede conectarse a bases de datos tradicionales, como SQL Server y Oracle. Erlang tiene unabiblioteca odbc integradaHerramientas disponibles para manejar bases de datos.

Conexión de base de datos

En nuestro ejemplo, utilizaremos Microsoft SQL Server. Antes de conectarse a la base de datos Microsoft SQL Server, asegúrese de que ya ha revisado los siguientes punteros.

  • Ya ha creado la base de datos TESTDB.

  • Ya ha creado una tabla EMPLOYEE en TESTDB.

  • La tabla contiene los campos FIRST_NAME, LAST_NAME, AGE, SEX e INCOME.

  • El ID de usuario "testuser" y la contraseña "test123”se establece para acceder a TESTDB.

  • Asegúrese de que ya ha creado un DSN ODBC llamado usersqlserver que crea una conexión ODBC a la base de datos

Establecer conexión

Para establecer una conexión con la base de datos, se puede usar el siguiente ejemplo de código.

Ejemplo

-module(helloworld). 
-export([start/0]). 
start(), ->
   odbc:start(), 
   {ok, Ref} = odbc:connect("DSN = usersqlserver;UID = testuser;PWD = test123 
   io:fwrite("~p",[Ref]).

La salida del programa anterior es como sigue-

Output

<0.33.0>

Sobre el programa anterior, hay algunos puntos que需要注意.

  • El método de inicio de la biblioteca odbc se utiliza para indicar el inicio de la operación de base de datos.

  • El método de conexión requiere DSN, nombre de usuario y contraseña para conectarse.

Crear tabla de base de datos

El siguiente paso después de conectarse a la base de datos es crear una tabla en nuestra base de datos. El siguiente ejemplo muestra cómo crear una tabla en la base de datos utilizando 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)")

Si verifica la base de datos ahora, verá que se creará un nombreEMPLOYEEde la tabla.

Insertar un registro en la base de datos

Se necesita para crear un registro en una tabla de base de datos.

El siguiente ejemplo insertará un registro en la tabla employee. Si la tabla se actualiza con éxito, se devolverán los valores del registro actualizado y el número de registros actualizados.

Ejemplo

-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")).

La salida del programa será

{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")).

Output

{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"]}])

La salida del programa será

{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")).

La salida del programa será

{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")]).

20}},
   {"LASTNAME",{sql_varchar,20}},
   
   {"SEX",{sql_char,1}},
   {"INCOME",sql_integer}}}

Número de registros

Erlang también tiene la función de obtener el número total de registros en la tabla.

El siguiente programa muestra el mismo ejemplo.

-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)])).

La salida del programa será

{ok,1}