[Java] การเชื่อมต่อ database ผ่าน Datasource

          การเขียนโปรแกรมเชื่อมต่อฐานข้อมูลนอกจากจะเขียนต่อโดยตรง การเชื่อมต่อ MySQL Database ซึ่งเป็นการเชื่อมต่อที่ไม่ใช่วิธีที่ดีนัก เพราะเรา (developer) จะต้องรายละเอียดต่างๆ ตั้งแต่ยี่ห้อฐานข้อมูล, host, SID, username, password ไว้ในแอปฯ ของเรา หรือจะเรียกว่า "hard-code" ก็ไม่ผิด
//Legacy Way
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/sys", "root", "1234");
          สังเกตว่าเราจะต้องระบุ parameter กันไปโต้ง ๆ แบบนี้ ไม่ว่าจะเป็น admin หรือไม่ ก็สามารถนำ connection นี้ไปเชื่อมต่อฐานข้อมูลได้ทันที

          การเชื่อมต่อผ่าน datasource จะเป็นการผลักภาระให้ Application Server เป็นตัวจัดการ ซึ่งเรา (admin) จะต้องตั้งค่ารายละเอียดที่จำเป็นในการเชื่อมต่อฐานข้อมูลเข้าไป ซึ่งทำเพียงครั้งเดียว จากนั้นเขียนโปรแกรมเพื่อทำการ lookup ผ่านชื่อที่ตั้งไว้ โดยในภาพตัวอย่างเป็นการสร้าง datasource บน Wildfly Application Server *AppServ. ของภาษา Java มีหลายตัว หน้าจออาจแตกต่างกันเล็กน้อย

สิ่งที่จำเป็นในการสร้าง datasource

  • database driver คือ external library ที่สัมพันธ์กับยี่ห้อฐานข้อมูลที่เราใช้ เช่น oracle, mysql, db2 เป็นต้น
  • database driver class หรือ ชื่อคลาสหลักของ database driver 
  • JNDI Name เป็นชื่อที่ใช้ในการ lookup มักตั้งในลักษณะ java:/jdbc/
  • username, password ของฐานข้อมูล
create datasource in WildFly AS
test connection in WildFly AS
          หลังจากเตรียม datasource สำเร็จแล้ว เราสามารถทำการทดสอบ connection ได้ เพื่อเป็นการเช็คเบื้องต้นว่ามีปัญหาอะไรไหม โดยไม่จำเป็นต้องเขียนโปรแกรมมารันทดสอบ หากทดสอบไม่ผ่านเราก็สามารถตัดประเด็นเรื่องการ coding ไปได้เลย หากไม่มีอะไรผิดพลาดเราก็สามารถ lookup เพื่อเชื่อมต่อฐานข้อมูลได้ ซึ่งจะมีการเขียนที่แตกต่างจากวิธีก่อนหน้าเล็กน้อย แต่สุดท้ายจะได้ java.sql.Connection มาใช้งานเช่นเดียวกัน

//Datasource Way
InitialContext context = new InitialContext();
DataSource ds = (DataSource) context.lookup("jdbc/myDatasource");
Connection conn = ds.getConnection();
          นอกจากเรื่องการเขียนโปรแกรมที่ปลอดภัยยิ่งขึ้น datasource ยังเพิ่มเติมความสามารถเข้าไปด้วย อย่างเช่น Connection Pool ที่คอยควบคุมปริมาณการใช้งานฐานข้อมูล, การกำหนดเวลาใช้งานฐานข้อมูล (timeout) เป็นต้น โดยการตั้งค่าต่าง ๆ สามารถแบ่งการทำงานให้ชัดเจนมากขึ้น โดยให้ผู้ดูแลระบบ (admin) ตั้งค่าบน AppServ. และนักพัฒนา (developer) ก็เรียกใช้งานโดยไม่ต้องสนใจการตั้งค่าต่าง ๆ อ่านจบแล้วใครเขียนเว็บอยู่ก็รีบไปเปลี่ยนวิธีเขียนด้วยนะครับบ

Facebook Comment

Popular post of 7 days

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding