Apu*_*urv 7 java sql prepared-statement
我有一个包含多个搜索条件的搜索页面
等等
用户可以提供一个或多个搜索条件.我需要查询数据库以获取搜索结果.
使用普通JDBC,有两种方法可以实现这一点.
例如:
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 ...
Run Code Online (Sandbox Code Playgroud)
preparestatement例如:
String query = "SELECT * FROM EMPLOYEES WHERE EMP_NAME = ? AND EMP_ID = ? DATE_OF_JOINING = ? AND DEPARTMENT = ?";
Run Code Online (Sandbox Code Playgroud)
这个答案解释说,像上面的例子1,ex2可以修改,如下所示
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 ...
Run Code Online (Sandbox Code Playgroud)
然后仔细(记住参数索引)输入需要设置为准备好的语句.这听起来不是一个非常理想的解决方案.
有没有办法以优雅的方式(没有ORM框架)这样做?
我不喜欢StringBuilder每次都使用 a 来动态创建查询,特别是当有意义的组合的数量是可数且有限的时。
我总是更喜欢静态字符串。是的,您必须输入它们,但您只需输入一次。我宁愿这样做,也不愿付出复杂性和运行时的代价。