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

База данных Erlang

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

Соединение с базой данных

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

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

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

  • Эта таблица содержит поля FIRST_NAME, LAST_NAME, AGE, SEX и INCOME.

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

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

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

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

ее необходимо при создании записи в базе данных.

Ниже приведен пример вставки записи в таблицу 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, 
   "Вставка 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}]}

Таким образом, вы можете видеть, что команда 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"]}])]).

Вывод программы будет следующим::

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