[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

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

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

Port Forwarding สำหรับคนใช้ AIS Fibre

Popular

Portal คืออะไรกันนะ???

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

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

เรื่องของ ++i กับ i++

Port Forwarding สำหรับคนใช้ AIS Fibre

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

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

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง