Erlang - Bancos de dados

Erlang tem a capacidade de se conectar a bancos de dados tradicionais, como SQL Server e Oracle. Erlang tem uminbuilt odbc library que pode ser usado para trabalhar com bancos de dados.

Conexão de banco de dados

Em nosso exemplo, vamos usar o Microsoft SQL Server. Antes de conectar-se a um banco de dados Microsoft SQL Server, certifique-se de que os seguintes indicadores estejam marcados.

  • Você criou um banco de dados TESTDB.

  • Você criou uma tabela EMPLOYEE em TESTDB.

  • Esta tabela contém os campos FIRST_NAME, LAST_NAME, AGE, SEX e INCOME.

  • O ID do usuário "testuser" e a senha "test123" são definidos para acessar o TESTDB.

  • Certifique-se de ter criado um ODBC DSN chamado usersqlserver que cria uma conexão ODBC com o banco de dados

Estabelecendo uma conexão

Para estabelecer uma conexão com o banco de dados, o seguinte exemplo de código pode ser usado.

Example

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

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

O resultado do programa acima é o seguinte -

Output

<0.33.0>

As seguintes coisas precisam ser observadas sobre o programa acima.

  • O método inicial da biblioteca odbc é usado para indicar o início da operação do banco de dados.

  • O método de conexão requer um DSN, nome de usuário e senha para se conectar.

Criando uma tabela de banco de dados

A próxima etapa após conectar-se ao banco de dados é criar as tabelas em nosso banco de dados. O exemplo a seguir mostra como criar uma tabela no banco de dados 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)")

Se você verificar o banco de dados, verá que uma tabela chamada EMPLOYEE Será criado.

Inserindo um Registro no Banco de Dados

É necessário quando você deseja criar seus registros em uma tabela de banco de dados.

O exemplo a seguir irá inserir um registro na tabela de funcionários. Se a tabela for atualizada com sucesso, o registro e a instrução retornarão o valor do registro atualizado e o número de registros que foram atualizados.

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

O resultado do programa acima será -

Output

{updated,1}

Buscando registros do banco de dados

Erlang também tem a capacidade de buscar registros do banco de dados. Isso é feito por meio dosql_query method.

Um exemplo é mostrado no programa a seguir -

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

O resultado do programa acima será o seguinte -

Output

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

Portanto, você pode ver que o comando insert na última seção funcionou e o comando select retornou os dados corretos.

Buscando registros do banco de dados com base em parâmetros

Erlang também tem a capacidade de buscar registros do banco de dados com base em certos critérios de filtro.

Um exemplo é o seguinte -

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

O resultado do programa acima será -

Output

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

Atualizando Registros do Banco de Dados

Erlang também tem a capacidade de atualizar registros do banco de dados.

Um exemplo para o mesmo é o seguinte -

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

O resultado do programa acima será -

Output

{updated,1}

Excluindo Registros do Banco de Dados

Erlang também pode excluir registros do banco de dados.

Um exemplo para o mesmo é o seguinte -

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

O resultado do programa acima será o seguinte -

Output

{updated,1}

Estrutura da Tabela

Erlang também tem a capacidade de descrever a estrutura de uma tabela.

Um exemplo é o seguinte -

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

O resultado do programa acima será o seguinte -

Output

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

Contagem de registros

Erlang também tem a capacidade de buscar a contagem total dos registros em uma tabela.

Um exemplo do mesmo é mostrado no programa a seguir.

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

O resultado do programa acima será -

{ok,1}