我有一个包含多个搜索条件的搜索页面
等等
用户可以提供一个或多个搜索条件。我需要查询html" target="_blank">数据库以获取搜索结果。
使用纯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 ...
preparestatement
例如:
String query = "SELECT * FROM EMPLOYEES WHERE EMP_NAME = ? AND EMP_ID = ? DATE_OF_JOINING = ? AND DEPARTMENT = ?";
此答案说明,像上面的ex 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 ...
然后仔细地(牢记参数索引)将输入设置为准备好的语句。听起来这不是一个非常理想的解决方案。
有没有办法以一种优雅的方式做到这一点(没有ORM框架)?
我不想StringBuilder
每次都使用a 动态创建查询,尤其是在有意义的组合的数量是可数且有限的情况下。
我总是喜欢静态字符串。是的,您必须输入它们,但只需输入一次。我宁愿这样做,也不愿在复杂性和运行时付出代价。
问题内容: 我将如何在没有硬编码值的情况下编写此sql语句? 宁愿有这样的事情: 提前致谢.. 问题答案: 用您当前的方式构造SQL查询是一个糟糕的主意,因为它为各种SQL注入攻击打开了大门 。为了正确执行此操作,您必须改为使用“ 预备语句”。这也将解决您目前显然遇到的各种逃避问题。 请注意,这是一个昂贵的调用(除非您的应用程序服务器使用语句缓存和其他类似的功能)。从理论上讲,最好先准备一次语句,
问题内容: 我有以下带有四个参数的存储过程。 存储过程: 好吧,我正在这样准备: 这是一个正确的方式 或 有没有更好的方式来准备动态条款? 问题答案: 这就是所谓的全部查询,它基本上是这样的:
我需要实现一个方法来查询不同数量的条件。我不想每次都做一个新的准备好的语句,因为这就是为什么我首先使用准备好的语句。基本上我有三个条件。 现在我不知道如何用准备好的语句进行这样的查询。因为我没有办法设置。有什么建议可以实现这一点吗?
例如,如果则添加一个where子句,但如果它为空,则不会在查询中使用该子句。 最好的情况是使用筛选表单来缩小记录列表:如果没有使用筛选器,则查询甚至不会使用WHERE,而所有筛选器都可能使用,从而产生一个大的WHERE查询。 正如我现在看到的,我需要为每种情况注册一个准备好的语句,但这将导致大量语句需要分别维护和测试。
根据给定的表数据,第三行中的非空字段是“field1”和“field3”。因此WHERE子句将是: 我如何编写一个具有动态WHERE子句的通用SQL来满足这个需求?
VARCHAR 100 VARCHAR 100 VARCHAR 100 [ID][NAME][NICKNAME][FAVORITE_COLOR] 1约翰·约翰尼·瑞德 我尝试的另一个选择是: 这也不起作用,结果集为空。 最后,我尝试了一个不同的SQL,但它显然是错误的,返回了太多的行(因为它不够严格): 所以我的问题是:如何使用Java PreparedStatement使用MySQL“is nu