Erlang - Bases de datos

Erlang tiene la capacidad de conectarse a las bases de datos tradicionales como SQL Server y Oracle. Erlang tiene uninbuilt odbc library que se puede utilizar para trabajar con bases de datos.

Conexión de base de datos

En nuestro ejemplo, vamos a hacer uso de Microsoft SQL Server. Antes de conectarse a una base de datos de Microsoft SQL Server, asegúrese de que los siguientes indicadores estén marcados.

  • Ha creado una base de datos TESTDB.

  • Ha creado una tabla EMPLOYEE en TESTDB.

  • Esta tabla tiene campos FIRST_NAME, APELLIDO, EDAD, SEXO e INGRESOS.

  • El ID de usuario "testuser" y la contraseña "test123" están configurados para acceder a TESTDB.

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

Establecer una conexión

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

Example

-module(helloworld). 
-export([start/0]). 

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

El resultado del programa anterior es el siguiente:

Output

<0.33.0>

Se deben tener en cuenta las siguientes cosas sobre el programa anterior.

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

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

Crear una tabla de base de datos

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

Si ahora revisa la base de datos, verá que una tabla llamada EMPLOYEE se creará.

Insertar un registro en la base de datos

Es necesario cuando desea crear sus registros en una tabla de base de datos.

El siguiente ejemplo insertará un registro en la tabla de empleados. Si la tabla se actualiza correctamente, el registro y la declaración devolverán el valor del registro actualizado y el número de registros que se actualizaron.

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

La salida del programa anterior será:

Output

{updated,1}

Obtener registros de la base de datos

Erlang también tiene la capacidad de buscar registros de la base de datos. Esto se hace a través delsql_query method.

Se muestra un ejemplo en el siguiente programa:

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

La salida del programa anterior será la siguiente:

Output

{selected,["FIRSTNAME","LASTNAME","AGE","SEX","INCOME"],
[{"Mac","Mohan",20,"M",2000}]}

Entonces puede ver que el comando de inserción en la última sección funcionó y el comando de selección devolvió los datos correctos.

Obtención de registros de la base de datos según parámetros

Erlang también tiene la capacidad de buscar registros de la base de datos según ciertos criterios de filtrado.

Un ejemplo es el siguiente:

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

La salida del programa anterior será:

Output

{selected,["FIRSTNAME","LASTNAME","AGE","SEX","INCOME"],
         [{"Mac","Mohan",20,"M",2000}]}

Actualización de registros de la base de datos

Erlang también tiene la capacidad de actualizar registros de la base de datos.

Un ejemplo de lo mismo es el siguiente:

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

La salida del programa anterior será:

Output

{updated,1}

Eliminar registros de la base de datos

Erlang también tiene la capacidad de eliminar registros de la base de datos.

Un ejemplo de lo mismo es el siguiente:

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

La salida del programa anterior será la siguiente:

Output

{updated,1}

Estructura de la tabla

Erlang también tiene la capacidad de describir una estructura de tabla.

Un ejemplo es el siguiente:

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

La salida del programa anterior será la siguiente:

Output

{ok,[{"FIRSTNAME",{sql_varchar,20}},
   {"LASTNAME",{sql_varchar,20}},
   {"AGE",sql_integer},
   {"SEX",{sql_char,1}},
   {"INCOME",sql_integer}]}

Número de registros

Erlang también tiene la capacidad de obtener el recuento total de registros en una tabla.

Un ejemplo de lo mismo se muestra en el siguiente programa.

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

La salida del programa anterior será:

{ok,1}