Posts

Showing posts from 2017

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

Image
การเขียนโปรแกรมเชื่อมต่อฐานข้อมูลนอกจากจะเขียนต่อโดยตรง การเชื่อมต่อ 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 มีหลายตัว หน้าจออาจแตกต่างกันเล็กน…

[Java] try-with-resouces กับการคืนทรัพยากรบน Java 7

Java 7 มี syntax ที่เราอาจไม่ได้รู้สึกตัวว่ามันมีอยู่ คราวนี้เราก็จะมาทำความรู้จัก try-with-resources ที่เป็นตัวช่วยสำคัญในการยุ่งกับ resources ต่าง ๆ เช่น การเชื่อมต่อฐานข้อมูล(Database connection) การเขียน-อ่านไฟล์ เป็นต้น

          ปกติแล้ว การเขียนโปรแกรมขั้นพื้นฐาน ก็เราได้รู้จักการใช้งาน object ซึ่งก็จะมี lifetime ของตัวมันเองแต่ก่อน การยุ่งกับ resources เราจำเป็นจะต้องเขียนเปิด-ปิดการใช้งานเอง จุดนี้ try-with-resources จะเข้ามาช่วยให้เราเขียนโค้ดง่ายขึ้น
การเชื่อมต่อฐานข้อมูลโดยไม่ใช้ try-with-resourcs ถ้าเขียนตามจินตนาการขั้นแรกสุด
เปิดใช้งาน resourcesอย่าลืมปิดเมื่อใช้เสร็จConnection con = getConnection(); ... .. . con.close()           แต่ แต่แต่ !การเรียกใช้งาน resources ส่วนใหญ่จะพ่วงกันมาหลายตัว และจะบังคับให้เราเขียน try-catch เพื่อจัดการบางอย่างเมื่อเกิดปัญหาขึ้น ซึ่งเราจะต้องตามปิด resources ทั้งเคสที่ทำงานถูกต้องและไม่ถูกต้องของทุกตัว
Connection con = null; Statement stm = null; ResultSet rs = null; try { String sql = "SELECT * FROM UserAccount"; con …

Facebook Comment