2015-02-09 68 views
1

使用LinkedHashMap的在SQL Server数据库中的下拉列表中我已经有三个列的表即Ref_Name,Ref_from和Ref_to.Now我希望有一个下拉列表,即所有保存值逐行的行的列的值应该是在下拉列表中方式如下: -如何填充从SQL Server数据库在java中

参考-1(2014年10月07:17:00.000到2014年10月08:46:00.000)

参考-2(2014-09-01 10:00:00.000至2014-09-01 11:00:00.000)

为此,我已经使用LinkedHashMap的是: -

public LinkedHashMap<String, List<String>> connect() 
    { 
     ArrayList<String> list = new ArrayList<String>(); 
     try 
     { 
      con = getConnection(); 
      stmt = con.createStatement(); 
      String sql="select Ref_No,From_Date,To_Date from Ref_time"; 
      stmt.executeQuery(sql); 
      rs = stmt.getResultSet(); 
      while (rs.next()) 
      { 
       list.add(rs.getString(2)); 
       list.add(rs.getString(3)); 
       ref.put(rs.getString(1), list); 
      } 

     } 
     catch(Exception e) 
     { 
      System.out.println("\nException "+e); 
     } 
     finally 
     { 
      //closeConnection(stmt, rs, con); 
     } 
     return ref; 
    } 

当我使用它在JSP作为

<select name="ref_logtime"> 
<c:forEach var="aff" items="${obj.connect()}"> 
<option value="${aff.key}">${aff.key}</option> 
<option value="${aff.value}">${aff.value}</option> 
</c:forEach> 
</select> 

然后在下拉菜单中,我得到的值: -

Reference-1 
All datetime entries are shown here 
Reference-2 
All datetime entries are shown here 

但我希望我的下拉列表具有值明智的行。如何做到这一点?

+0

更改'ArrayList List' to'ArrayList list'它更具可读性。 – 2015-02-09 10:15:58

+0

@atishshimpi完成。 – MES 2015-02-09 10:21:06

回答

1

您的代码有两个问题。首先,每参考映射需要有它自己的List。目前,该列表正在共享,因此两个参考条目都会显示所有日期。更改代码为

rs = stmt.executeQuery(sql); 
while (rs.next()) 
{ 
    List<String> list = new ArrayList<String>(); 
    list.add(rs.getString(2)); 
    list.add(rs.getString(3)); 
    ref.put(rs.getString(1), list); 
} 

第二个问题是使用JSTL标记。你只需要一个<option>它会为你运行两次循环内标签(因为你有两个参考项来自数据库),以产生两个<option>标签条目。

<select name="ref_logtime"> 
    <c:forEach var="aff" items="${obj.connect()}"> 
    <option value="${aff.key}">${aff.key} ${aff.value}</option> 
    </c:forEach> 
</select>