Erlang - Базы данных

Erlang имеет возможность подключаться к традиционным базам данных, таким как SQL Server и Oracle. Erlang имеетinbuilt odbc library который можно использовать для работы с базами данных.

Подключение к базе данных

В нашем примере мы собираемся использовать Microsoft SQL Server. Перед подключением к базе данных Microsoft SQL Server убедитесь, что отмечены следующие указатели.

  • Вы создали базу данных TESTDB.

  • Вы создали таблицу EMPLOYEE в TESTDB.

  • В этой таблице есть поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.

  • Идентификатор пользователя testuser и пароль test123 установлены для доступа к TESTDB.

  • Убедитесь, что вы создали ODBC DSN с именем usersqlserver который создает соединение 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>

В отношении вышеуказанной программы необходимо отметить следующее.

  • Метод start библиотеки odbc используется для обозначения начала операции с базой данных.

  • Метод подключения требует 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 будет создан.

Вставка записи в базу данных

Это требуется, когда вы хотите создать свои записи в таблице базы данных.

В следующем примере будет вставлена ​​запись в таблицу сотрудников. Если таблица успешно обновлена, запись и оператор вернут значение обновленной записи и количество обновленных записей.

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}]}

Итак, вы можете видеть, что команда вставки в последнем разделе сработала, а команда выбора вернула правильные данные.

Получение записей из базы данных на основе параметров

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}