Erlang - Cơ sở dữ liệu

Erlang có khả năng kết nối với các cơ sở dữ liệu truyền thống như SQL Server và Oracle. Erlang có mộtinbuilt odbc library có thể được sử dụng để làm việc với cơ sở dữ liệu.

Kết nối cơ sở dữ liệu

Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng Microsoft SQL Server. Trước khi kết nối với cơ sở dữ liệu Microsoft SQL Server, hãy đảm bảo rằng các con trỏ sau được chọn.

  • Bạn đã tạo một cơ sở dữ liệu TESTDB.

  • Bạn đã tạo một bảng EMPLOYEE trong TESTDB.

  • Bảng này có các trường FIRST_NAME, LAST_NAME, AGE, SEX và THU NHẬP.

  • ID người dùng "testuser" và mật khẩu "test123" được đặt để truy cập TESTDB.

  • Đảm bảo rằng bạn đã tạo ODBC DSN được gọi là usersqlserver tạo kết nối ODBC với cơ sở dữ liệu

Thiết lập kết nối

Để thiết lập kết nối với cơ sở dữ liệu, có thể sử dụng ví dụ mã sau.

Example

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

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

Kết quả của chương trình trên như sau:

Output

<0.33.0>

Những điều sau đây cần được lưu ý về chương trình trên.

  • Phương thức bắt đầu của thư viện odbc được sử dụng để chỉ ra sự bắt đầu của hoạt động cơ sở dữ liệu.

  • Phương thức kết nối yêu cầu DSN, tên người dùng và mật khẩu để kết nối.

Tạo bảng cơ sở dữ liệu

Bước tiếp theo sau khi kết nối với cơ sở dữ liệu là tạo các bảng trong cơ sở dữ liệu của chúng tôi. Ví dụ sau đây cho thấy cách tạo một bảng trong cơ sở dữ liệu bằng 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)")

Nếu bây giờ bạn kiểm tra cơ sở dữ liệu, bạn sẽ thấy một bảng có tên EMPLOYEE sẽ được tạo ra.

Chèn Bản ghi vào Cơ sở dữ liệu

Nó được yêu cầu khi bạn muốn tạo bản ghi của mình vào một bảng cơ sở dữ liệu.

Ví dụ sau sẽ chèn một bản ghi trong bảng nhân viên. Nếu bảng được cập nhật thành công, bản ghi và câu lệnh sẽ trả về giá trị của bản ghi được cập nhật và số lượng bản ghi đã được cập nhật.

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

Đầu ra của chương trình trên sẽ là:

Output

{updated,1}

Tìm nạp Bản ghi từ Cơ sở dữ liệu

Erlang cũng có khả năng lấy các bản ghi từ cơ sở dữ liệu. Điều này được thực hiện thông quasql_query method.

Một ví dụ được hiển thị trong chương trình sau:

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

Kết quả của chương trình trên sẽ như sau:

Output

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

Vì vậy, bạn có thể thấy rằng lệnh chèn trong phần cuối cùng đã hoạt động và lệnh select trả về đúng dữ liệu.

Tìm nạp bản ghi từ cơ sở dữ liệu dựa trên các tham số

Erlang cũng có khả năng lấy các bản ghi từ cơ sở dữ liệu dựa trên các tiêu chí bộ lọc nhất định.

Một ví dụ như sau:

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

Đầu ra của chương trình trên sẽ là:

Output

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

Cập nhật hồ sơ từ cơ sở dữ liệu

Erlang cũng có khả năng cập nhật các bản ghi từ cơ sở dữ liệu.

Một ví dụ cho điều tương tự như sau:

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

Đầu ra của chương trình trên sẽ là:

Output

{updated,1}

Xóa bản ghi khỏi cơ sở dữ liệu

Erlang cũng có khả năng xóa các bản ghi khỏi cơ sở dữ liệu.

Một ví dụ cho điều tương tự như sau:

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

Kết quả của chương trình trên sẽ như sau:

Output

{updated,1}

Cấu trúc bảng

Erlang cũng có khả năng mô tả cấu trúc bảng.

Một ví dụ như sau:

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

Kết quả của chương trình trên sẽ như sau:

Output

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

Bản ghi đếm

Erlang cũng có khả năng lấy tổng số bản ghi trong một bảng.

Một ví dụ cho điều tương tự được hiển thị trong chương trình sau.

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

Đầu ra của chương trình trên sẽ là:

{ok,1}