这是一个愚蠢的问题,但是如何在Java中删除sql语句中的尾随AND?
我根据我提供的Profile对象动态生成语句。因此,如果对象具有“name = person1”和“address = example road”,则该语句应为:
select * from Profile where name = 'person1' and address = 'example road'
问题在于我使用for循环遍历对象的声明字段,因此它在末尾添加了一个AND:
select * from Profile where name = 'person1' and address = 'example road' and
什么是摆脱尾随AND的最好方法?
答案 0 :(得分:1)
有些人会简单地修剪最后的"和#34;从结果字符串的末尾开始,但通常最好避免编写最终字符串。
如果你的循环看起来像这样:
for (String sqlCondition : sqlConditionsList) {
sqlStatement.append(sqlCondition).append(" and ");
}
然后我建议将其更改为:
boolean separatorNeeded = false;
for (String sqlCondition : sqlConditionsList) {
if (separatorNeede) {
sqlStatement.append(" and ");
}
sqlStatement.append(sqlCondition);
separatorNeeded = true;
}
这只会添加"和"实际需要的分隔符,在你正在迭代的列表中的连续项之间。
答案 1 :(得分:1)
您应该使用准备好的声明。构建这样的查询会让您对SQL注入和其他攻击持开放态度。
如果您必须继续使用当前的方法,那么快速解决方法是通过正则表达式剥离最终的AND
:
String sql = "select * from Profile where name = 'person1' and address = 'example road' and";
sql = sql.replaceAll("(?i)\\s+and$", "");
答案 2 :(得分:0)
您应该使用预准备语句或ORM。但是如果你仍然希望以这种容易出错的方式做到这一点,你可以这样做:
public static void main(String args[]) {
String[] params = new String[3];
params[0] = "x = y";
params[1] = "z = a";
params[2] = "b = d";
String result = String.join(" and ", params);
System.out.println(result);
}
使用join方法比使用尾随和。
更容易解决问题