การสร้าง Dynamic LIKE Query ใน Java อย่างปลอดภัย
ปัญหาหลัก: การต่อสตริง (String Concatenation) สำหรับ LIKE pattern ต้องจัดการ Single Quote ให้ถูกต้อง
รูปแบบที่ถูกต้อง
String searchKeyWord = "Smith";
String sqlQuery = "SELECT * FROM demo19 WHERE name LIKE '%" + searchKeyWord + "%'";
ผลลัพธ์ SQL: SELECT * FROM demo19 WHERE name LIKE '%Smith%'
ตัวอย่าง Java โค้ดเต็ม
public class RemoveJavaQueryError {
public static void main(String[] args) {
String searchKeyWord = "Smith";
try (Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/sampledatabase", "root", "123456");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(
"SELECT * FROM demo19 WHERE name LIKE '%" + searchKeyWord + "%'")) {
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
ผลลัพธ์
John Smith
Adam Smith
⚠️ คำเตือนสำคัญ: วิธีนี้มีช่องโหว่ SQL Injection! ควรใช้ PreparedStatement แทน:
String sql = "SELECT * FROM demo19 WHERE name LIKE ?";
try (PreparedStatement ps = con.prepareStatement(sql)) {
ps.setString(1, "%" + searchKeyWord + "%");
ResultSet rs = ps.executeQuery();
// ...
}