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

  • ID ผู้ใช้ "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>

สิ่งต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น

  • วิธีการเริ่มต้นของไลบรารี 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}]}

ดังนั้นคุณจะเห็นว่าคำสั่งแทรกในส่วนสุดท้ายใช้งานได้และคำสั่ง select ส่งคืนข้อมูลที่ถูกต้อง

การดึงข้อมูลจากฐานข้อมูลตามพารามิเตอร์

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}