แท็ก <sql:setDataSource> ใช้สำหรับตั้งค่าการเชื่อมต่อฐานข้อมูล (DataSource) ไว้ในตัวแปรการตั้งค่า หรือเก็บใน scoped variable เพื่อนำไปใช้กับแท็ก SQL อื่นๆ
แอตทริบิวต์ของ <sql:setDataSource>
| แอตทริบิวต์ | คำอธิบาย | จำเป็น | ค่าเริ่มต้น |
|---|---|---|---|
| driver | ชื่อคลาส JDBC Driver ที่ต้องจดทะเบียน | ไม่ | None |
| url | JDBC URL สำหรับเชื่อมต่อฐานข้อมูล | ไม่ | None |
| user | ชื่อผู้ใช้ฐานข้อมูล | ไม่ | None |
| password | รหัสผ่านฐานข้อมูล | ไม่ | None |
| dataSource | DataSource ที่เตรียมไว้ล่วงหน้า (javax.sql.DataSource) | ไม่ | None |
| var | ชื่อตัวแปรสำหรับอ้างอิง DataSource นี้ | ไม่ | Set default |
| scope | ขอบเขตของตัวแปร (page, request, session, application) | ไม่ | Page |
หมายเหตุ: ในตารางเดิมมี password ซ้ำ 2 แถว - แก้ไขแล้วในตารางนี้
ตัวอย่างการใช้งาน
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="https://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<html>
<head>
<title>JSTL sql:setDataSource Tag</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/TEST"
user="user_id" password="mypassword"/>
<sql:query dataSource="${snapshot}" sql="..." var="result" />
</body>
</html>
แนวทางปฏิบัติที่ดี (Best Practice)
- ในระบบจริง ควรกำหนด DataSource ใน Container (เช่น Tomcat context.xml) และเรียกใช้ผ่าน JNDI
- หลีกเลี่ยงการใส่รหัสผ่านตรงใน JSP ควรใช้การตั้งค่าภายนอก
- ใช้แท็กนี้ครั้งเดียว แล้วนำตัวแปร var ไปใช้กับ sql:query, sql:update ต่อไป