1

我有一个 LinkedHahMap map1 ,它把key作为我的beam_current,它是 double 类型,而 value 作为我的 logtime,它是字符串类型。现在我想在我的 sql 查询中使用这个 map1.keySet() 作为-

Set<Double> arr=    map1.keySet();
String vs2="select b.beam_current, b.beam_energy where
          b.logtime between '"+first+"' and '"+last+"' and b.beam_current in('"+arr+"')";

但是当我使用arr保存map1 key 的值时,**什么都没有显示。**我们不能在 sql 查询中使用 map1.KeySet() 方法还是我以错误的方式实现它?

4

2 回答 2

2

首先将您的地图键转换为逗号分隔的字符串,然后在您的查询中使用它。

  List<Double> slist = new ArrayList<Double>(map1.keySet());
  String s = StringUtils.join(slist, ',');


      String vs2="select b.beam_current, b.beam_energy where
                  b.logtime between '"+first+"' and '"+last+"' and    
                  b.beam_current in('"+s+"')";
于 2015-02-11T10:39:35.950 回答
0

如果您不想依赖外部库(如 StringUtils.join),您可以手动完成:

public static void main(String[] args) {
    HashMap<Double, String> map1 = new HashMap<Double, String>();
    map1.put(1.5, "");
    map1.put(2.5, "");
    String first = "first";
    String last = "last";

    String query = buildQuery(map1, first, last);
    System.out.println(query);
}

private static String buildQuery(HashMap<Double, String> map1, String first, String last) {
    StringBuilder sb = new StringBuilder();
    sb.append("select b.beam_current, b.beam_energy where b.logtime between '");
    sb.append(first);
    sb.append("' and '");
    sb.append(last);
    sb.append("' and b.beam_current in (");
    String separator = "";
    for (Double val : map1.keySet()) {
        sb.append(separator);
        sb.append(val);
        separator = ", ";
    }
    sb.append(")");
    return sb.toString();
}
于 2015-02-11T10:47:05.507 回答