【发布时间】:2012-02-19 21:41:00
【问题描述】:
我有一个 MySQL 数据库,我正在尝试搜索它并将结果显示在一个表格中,该表格与网页上的 HTML 中的 db 具有相同的列。我正在为 servlet 使用 JAVA,并且我让网页使用 JavaScript 将搜索字符串发送到 servlet。我知道如何:
- 连接到数据库
- 查询 db 并在结果集中检索适当的数据
我无法从结果集返回并在表格中的网页上显示它。
【问题讨论】:
我有一个 MySQL 数据库,我正在尝试搜索它并将结果显示在一个表格中,该表格与网页上的 HTML 中的 db 具有相同的列。我正在为 servlet 使用 JAVA,并且我让网页使用 JavaScript 将搜索字符串发送到 servlet。我知道如何:
我无法从结果集返回并在表格中的网页上显示它。
【问题讨论】:
这是一个很好的教程(如果现在有点老了)。它涵盖了从数据库获取数据、使用 MVC 类型架构、Java bean 和带有表达式语言的 JSP。
请看第 17 章。
【讨论】:
您可以使用ResultSetMetaData 在 HTML 表格中显示您的数据。我假设 'rs' 是查询结果集的变量。以下应该适合你
int rowCount = 0;
PrintWriter out = response.getWriter();
out.println("<P ALIGN='center'><TABLE BORDER=1>");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
// table header
out.println("<TR>");
for (int i = 0; i < columnCount; i++) {
out.println("<TH>" + rsmd.getColumnLabel(i + 1) + "</TH>");
}
out.println("</TR>");
// the data
while (rs.next()) {
rowCount++;
out.println("<TR>");
for (int i = 0; i < columnCount; i++) {
out.println("<TD>" + rs.getString(i + 1) + "</TD>");
}
out.println("</TR>");
}
out.println("</TABLE></P>");
return rowCount;
}
您可以查看此tutorial 了解详细信息。
【讨论】:
ResultSetMetaData - 是的,这是获取列名的更好方法,而不是在 servlet 中硬编码。只有当您希望在 HTML 表中使用与相应数据库表中不同的列名时,硬编码才实用。
ResultSetMetaData。很好的一点@WebUser..
您是说您无法遍历 ResultSet 对象并在 servlet 中生成 HTML?
if (rs.next()) {
out.print("<table><tr><th>column1</th><th>column2</th>...</tr>");
do {
out.print("<tr>");
out.print(new StringBuilder("<td>").append(rs.getObject("column1"))append("</td>").toString());
out.print(new StringBuilder("<td>").append(rs.getObject("column2"))append("</td>").toString());
...
out.print("</tr>");
} while (rs.next());
out.print("</table>");
}
【讨论】:
步骤
1)假设您从数据库中获取列表
2) 将此列表设置为 http-request 属性。
(使用 setAttribute 函数)
3) 并从 httpRequest.
获取 RequestDispatcher
4) 在 jsp 上使用以下
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<Table>
<Tr>
<td>col1</td>
<td>col2</td>
</tr>
<c:forEach var="i" items="${listName}">
<tr>
<td>
<c:out value="${i['col1']}"/>
</td>
<td>
<c:out value="${i['col1']}"/>
</td>
<tr>
</c:forEach>
</table>
【讨论】: