有关日期参数匹配数据库数据的方法

来源:互联网 发布:淘宝代销商品怎么刷单 编辑:程序博客网 时间:2024/05/16 15:07

应用场景:

 从前台传来一个时间段:开始日期 start (如2012-11-05) , 结束时间  end(如2012-11-15), 从数据库查询 从日期  start  到 日期end 之间所有符合条件的数据集合,返回一个  List 对象

例如:

/** * 返回指定 观测站某时间段内每天8时的水位集合 */@Overridepublic List getDataByStartAndEndTime(String id, String start, String end) {String time = "08";String startDate = start + " " + time +":00:00";String endDate = end + " " + time +":00:00";String sql = "select stcd, to_char(tm, 'YYYY-MM-DD') tm, rz from st_rsvr_r  where stcd = ? and tm <= to_date( ? , 'YYYY-MM-DD hh24:mi:ss') and tm > to_date( ? , 'YYYY-MM-DD hh24:mi:ss') and to_char(tm, 'hh24')= ? order by tm ";return getJdbcTemplate().queryForList(sql, id, startDate, endDate, time);}


返回List之后,需要将日期start 到end 之间的某个日期与数据库查询出来的List对象中某个日期进行匹配,new一个数组,数组值依次表示  日期start到end  每日8时的水位值,如果数据库中没有某个日期的记录,那么这天的水位值存为0,方法如下 :(其中startdata1 对应 结束日期 end ,  enddata 对应 开始日期 start)

/** * 返回带参某水库水位数据源 * @param startdata1  开始日期  * @param enddata  结束日期   * @param num   * @return */private double[] getWaterLineHelp(String id, String startdata1, String enddata, int num) {Map<String, String> resultMap = new HashMap<String, String>();double[] getd = new double[num];List<Map> list = stRsvrRDao.getDataByStartAndEndTime(id, startdata1, enddata);if (null != list && !list.isEmpty()) {for(int i=0; i<list.size(); i++){Map map = list.get(i);resultMap.put(map.get("TM") + "", map.get("RZ") + "");}}if (null != getd && getd.length > 0) {for (int i = 0; i < getd.length; i++) {String key = DateUtils.getNextDay2(enddata, i+1 + "");if (resultMap.containsKey(key)) {getd[i] = Double.parseDouble(resultMap.get(key));} else {getd[i] = 0;}}}return getd;}

如上代码,遍历List 用Map对象map接收,然后将这个map对象中的日期和水位存入另一个Map对象resultMap中,  然后从开始日期 enddata依次延后 ,跟resultMap对象中的key值匹配,如果相等,就表示这个日期存有水位值,赋值就好;如果没有匹配上,表示数据库没有这个日期的记录,赋值为0;
效果如下: