Erlang - bazy danych

Erlang ma możliwość łączenia się z tradycyjnymi bazami danych, takimi jak SQL Server i Oracle. Erlang mainbuilt odbc library które można wykorzystać do pracy z bazami danych.

Połączenie z bazą danych

W naszym przykładzie zamierzamy wykorzystać Microsoft SQL Server. Przed połączeniem się z bazą danych Microsoft SQL Server upewnij się, że zaznaczone są następujące wskaźniki.

  • Utworzyłeś bazę danych TESTDB.

  • Utworzyłeś tabelę PRACOWNIK w TESTDB.

  • Ta tabela zawiera pola FIRST_NAME, LAST_NAME, AGE, SEX i INCOME.

  • ID użytkownika „testuser” i hasło „test123” są ustawione na dostęp do bazy danych TESTDB.

  • Upewnij się, że utworzyłeś ODBC DSN o nazwie usersqlserver który tworzy połączenie ODBC z bazą danych

Nawiązywanie połączenia

Aby nawiązać połączenie z bazą danych, można użyć następującego przykładu kodu.

Example

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

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

Wynik powyższego programu jest następujący -

Output

<0.33.0>

Na temat powyższego programu należy zwrócić uwagę na następujące kwestie.

  • Metoda uruchamiania biblioteki ODBC służy do wskazania początku działania bazy danych.

  • Metoda łączenia wymaga podania DSN, nazwy użytkownika i hasła do połączenia.

Tworzenie tabeli bazy danych

Kolejnym krokiem po połączeniu się z bazą danych jest utworzenie tabel w naszej bazie. Poniższy przykład pokazuje, jak utworzyć tabelę w bazie danych przy użyciu 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)")

Jeśli teraz sprawdzisz bazę danych, zobaczysz tabelę o nazwie EMPLOYEE zostanie stworzony.

Wstawianie rekordu do bazy danych

Jest to wymagane, gdy chcesz utworzyć rekordy w tabeli bazy danych.

Poniższy przykład wstawi rekord do tabeli pracownika. Jeśli tabela zostanie pomyślnie zaktualizowana, rekord i instrukcja zwrócą wartość zaktualizowanego rekordu i liczbę rekordów, które zostały zaktualizowane.

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

Wynik powyższego programu będzie -

Output

{updated,1}

Pobieranie rekordów z bazy danych

Erlang ma również możliwość pobierania rekordów z bazy danych. Odbywa się to za pośrednictwemsql_query method.

Przykład jest pokazany w następującym programie -

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

Wynik powyższego programu będzie następujący -

Output

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

Możesz więc zobaczyć, że polecenie insert w ostatniej sekcji zadziałało, a polecenie select zwróciło prawidłowe dane.

Pobieranie rekordów z bazy danych na podstawie parametrów

Erlang ma również możliwość pobierania rekordów z bazy danych na podstawie określonych kryteriów filtrowania.

Przykład jest następujący -

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

Wynik powyższego programu będzie -

Output

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

Aktualizowanie rekordów z bazy danych

Erlang ma również możliwość aktualizowania rekordów z bazy danych.

Przykład tego samego jest następujący -

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

Wynik powyższego programu będzie -

Output

{updated,1}

Usuwanie rekordów z bazy danych

Erlang ma również możliwość usuwania rekordów z bazy danych.

Przykład tego samego jest następujący -

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

Wynik powyższego programu będzie następujący -

Output

{updated,1}

Struktura tabeli

Erlang ma również możliwość opisania struktury tabeli.

Przykład jest następujący -

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

Wynik powyższego programu będzie następujący -

Output

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

Liczenie rekordów

Erlang ma również możliwość pobrania całkowitej liczby rekordów w tabeli.

Przykład tego samego pokazano w poniższym programie.

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

Wynik powyższego programu będzie -

{ok,1}