Mam stronę wyszukiwania z wielu kryteriów wyszukiwaniaSporządzone sprawozdanie z dynamicznym gdzie klauzula
- Nazwa Pracownik
- Pracownik Id
- Data przystąpienia
- Departament
etc
Użytkownik może zapewnić jeden lub więcej kryteria wyszukiwania. Muszę wysłać zapytanie do bazy danych, aby uzyskać wyniki wyszukiwania.
Używając zwykłego JDBC, są dwie możliwości osiągnięcia tego.
- Przygotuj zapytanie SQL, dodając kryteria wyszukiwania podane przez użytkownika.
Np
String selectClause = "SELECT * FROM EMPLOYEES WHERE ";
String whereClause = "";
if(StringUtils.isNotBlank(empName)){
if(whereClause.length > 0){
whereClause += " AND ";
}
selectQuery += " EMP_NAME = " + empName;
}
if(StringUtils.isNotBlank(empID)){
if(whereClause.length > 0){
whereClause += " AND ";
}
selectQuery += " EMP_ID = " + empID;
}
//... and so on ...
- Stosując
preparestatement
ex:
String query = "SELECT * FROM EMPLOYEES WHERE EMP_NAME = ? AND EMP_ID = ? DATE_OF_JOINING = ? AND DEPARTMENT = ?";
to answer wyjaśnia, że tak jak wirnik przykł 1 powyżej, ex2 można zmodyfikować, podobnie jak poniżej
String selectClause = "SELECT * FROM EMPLOYEES WHERE ";
String whereClause = "";
if(StringUtils.isNotBlank(empName)){
if(whereClause.length > 0){
whereClause += " AND ";
}
selectQuery += " EMP_NAME = ?";
}
if(StringUtils.isNotBlank(empID)){
if(whereClause.length > 0){
whereClause += " AND ";
}
selectQuery += " EMP_ID = ?";
}
//... and so on ...
Następnie ostrożnie (zachowując indeks parametrów na uwadze) wejście musi zostać ustawione na przygotowaną instrukcję. To nie brzmi jak idealne rozwiązanie.
Czy można to zrobić w elegancki sposób (bez frameworków ORM)?
Twoje pierwsze podejście może * łatwo * prowadzić do ataków typu SQL injection, jeśli nie jesteś bardzo ostrożny. –