我正在写一个查询从数据库搜索记录。我将3个值传递给该方法。我想以这样的方式编写我的查询,使得该列的条件被附加到查询中,该查询的传递的相应值非空。如果有其他陈述,我已经结束了。有没有办法优化它?优化,如果-else语句
if (StringUtils.isNotEmpty(projectId)) {
sql.append(" UPPER(CIRC.PROJECT_ID) like ?");
}
if (StringUtils.isNotEmpty(circuitId)) {
if (StringUtils.isNotEmpty(projectId)) {
sql.append(" AND");
}
sql.append(" UPPER(CIRC.CIRCUIT_ID) like ?");
}
if (StringUtils.isNotEmpty(orderRef)) {
if (StringUtils.isNotEmpty(projectId) || StringUtils.isNotEmpty(circuitId)) {
sql.append(" AND");
}
sql.append(" UPPER(CIRC.ORDERID) like ?");
}
JSONArray jsonArray = new JSONArray();
ResultSet rs = null;
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
PreparedStatement ps = null;
try {
if (connection != null) {
ps = connection.prepareStatement(sql.toString());
if (StringUtils.isNotEmpty(projectId)) {
ps.setString(1, "%" + projectId.toUpperCase() + "%");
}
if (StringUtils.isNotEmpty(circuitId)) {
if (StringUtils.isEmpty(projectId)) {
ps.setString(1, "%" + circuitId.toUpperCase() + "%");
} else {
ps.setString(2, "%" + circuitId.toUpperCase() + "%");
}
}
if (StringUtils.isNotEmpty(orderRef)) {
if (StringUtils.isEmpty(projectId) && StringUtils.isEmpty(circuitId)) {
ps.setString(1, "%" + orderRef.toUpperCase() + "%");
} else if (StringUtils.isEmpty(projectId) || StringUtils.isEmpty(circuitId)) {
ps.setString(2, "%" + orderRef.toUpperCase() + "%");
} else {
ps.setString(3, "%" + orderRef.toUpperCase() + "%");
}
}
注意:这个问题不是orm/jdbc的主题。也请忽略硬编码。
“messy if else statements。有没有办法优化它。”第1步:格式化您的代码。现在只是混乱而不完整。 –
[codereview.stackexchange.com](http://codereview.stackexchange.com/) – Blobonat
@AndyTurner我认为完整的代码是无关question.I已格式化的代码。 –