การเขียนโปรแกรมเชื่อมต่อฐานข้อมูลนอกจากจะเขียนต่อโดยตรง
การเชื่อมต่อ 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) ก็เรียกใช้งานโดยไม่ต้องสนใจการตั้งค่าต่าง ๆ อ่านจบแล้วใครเขียนเว็บอยู่ก็รีบไปเปลี่ยนวิธีเขียนด้วยนะครับบ