下面是我的Map,它有两个键值对。我需要使用下面的地图来制作一个字符串。
Map<String, String> data = new LinkedHashMap<String, String>();
data.put("created_date", duration);
data.put("limit", limit);
这是我应该使用上面的Map制作的最终字符串。我将在下面的String中的where子句中使用上面的Map。我将在where子句中使用上面Map的键和值。
下面是我在where子句中使用上面Map后的最终字符串。
String sql = "select * from testing where created_date between " + dateMap.get(duration) + " and date(now()) ORDER BY attributes DESC limit " + Integer.parseInt(limit) + " ";
这是我试过的 -
private static void getValue(Map<String, String> newData) {
for(Map.Entry<String, String> entry : newData.entrySet()) {
String sql = "select * from testing where " +entry.getKey()+ " between " + dateMap.get(entry.getValue()) + " and date(now()) ORDER BY attributes DESC limit " + Integer.parseInt(limit) + " ";
}
}
但显然这不会成功,因为它会逐一迭代Map中的所有条目。有什么办法我可以通常使用地图生成上面的字符串吗?
答案 0 :(得分:0)
从地图中,您可以获得给定密钥的值。 Map返回一个对象。因此,您可以获得如下所示的值和查询:
String createdDate = (String)data.get("created_date");
Integer limit = Integer.parseInt((String)data.get("limit"));
String sql = "select * from testing where created_date between " + createdDate + " and date(now()) ORDER BY attributes DESC limit " + limit + " ";
答案 1 :(得分:0)
请参阅无法实现,例如您对不同的密钥对值有不同的条件。但我不认为有必要这样做,你可以简单地使用
String sql = "select * from testing where created_date between " + data.get("created_date") + " and date(now()) ORDER BY attributes DESC limit " + data.get("limit");
注意:谨防SQL注入
答案 2 :(得分:0)
如果您可以使用枚举映射并创建枚举键集,则可以使代码更加干净。并使用单独的字段来保留日期字段名称而不是使用键。那么你可能不需要这个
的迭代器enum Keys {
DATE_FIED,
DATE_VALUE,
LIMIT;
}
public static void main(String[] args) {
Map<Keys, String> map = new EnumMap<>(Keys.class);
map.put(Keys.DATE_FIED, "created_date");
map.put(Keys.DATE_VALUE, "2004-12-05");
map.put(Keys.LIMIT, "225");
String query = getValue(map);
}
private static String getValue(Map<Keys, String> map) {
return "select * from testing where "
+ map.get(Keys.DATE_FIED)
+ " between "
+ map.get(Keys.DATE_VALUE)
+ " and date(now()) ORDER BY attributes DESC limit "
+ Integer.parseInt(map.get(Keys.LIMIT)) + " ";
}
答案 3 :(得分:0)
这是一个执行字符串插值的简单函数。它给出了一个模板字符串和一个参数图。模板字符串可能包含{name}
形式的替换标记。这些将使用参数图中的值填充。
import java.util.HashMap;
import java.util.Map;
public class Main {
public static String interpolate(String template, Map<String,?> parameters) {
final StringBuilder buffer = new StringBuilder();
final int end = template.length();
int p = 0, last = 0;
while (p < end) {
final char ch = template.charAt(p);
if (ch != '{') ++p;
else {
if (last < p) buffer.append(template, last, p);
final int start = ++p;
while (p < end && template.charAt(p) != '}') ++p;
final String name = template.substring(start, p);
final Object value = parameters.get(name);
final String text = value == null? "" : value.toString();
buffer.append(text);
last = ++p;
}
}
if (last < end) buffer.append(template, last, end);
return buffer.toString();
}
public static void main(String[] args) {
final Map<String,String> map = new HashMap<String, String>();
map.put("start", "1");
map.put("limit", "9");
System.out.println(interpolate("select blorks from flupper where jummy > {start} order by fump asc limit {limit}", map));
}
}
不要使用此代码生成SQL查询。根本不要!