如何使用 java 中的 LinkedHashMap 从 sql 服务器数据库填充下拉列表
How to populate the dropdown list from sql server database using LinkedHashMap in java
在 SQL 服务器数据库中,我有一个 table,它包含三列,即 Ref_Name、Ref_from 和 Ref_to.Now 我想要一个下拉列表逐行值,即该行的所有列值应按以下方式位于下拉列表中:-
Reference-1(2014-10-10 07:17:00.000 to 2014-10-10 08:46:00.000)
Reference-2(2014-09-01 10:00:00.000 to 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
但我希望我的下拉列表具有值行 wise.How 来做到这一点?
您的代码有两个问题。首先,每个 reference 映射都需要有自己的 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>
标记,它会为您 运行 两次(因为您有两个来自数据库的 reference 条目)来生成两个 <option>
标签条目。
<select name="ref_logtime">
<c:forEach var="aff" items="${obj.connect()}">
<option value="${aff.key}">${aff.key} ${aff.value}</option>
</c:forEach>
</select>
在 SQL 服务器数据库中,我有一个 table,它包含三列,即 Ref_Name、Ref_from 和 Ref_to.Now 我想要一个下拉列表逐行值,即该行的所有列值应按以下方式位于下拉列表中:-
Reference-1(2014-10-10 07:17:00.000 to 2014-10-10 08:46:00.000)
Reference-2(2014-09-01 10:00:00.000 to 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
但我希望我的下拉列表具有值行 wise.How 来做到这一点?
您的代码有两个问题。首先,每个 reference 映射都需要有自己的 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>
标记,它会为您 运行 两次(因为您有两个来自数据库的 reference 条目)来生成两个 <option>
标签条目。
<select name="ref_logtime">
<c:forEach var="aff" items="${obj.connect()}">
<option value="${aff.key}">${aff.key} ${aff.value}</option>
</c:forEach>
</select>