java - 如何使 Java ResultSet 在我的 jsp 中可用?

标签 java jsp jdbc jstl

<分区>

我想将 sql:query 替换为一些 Java 代码,这些代码构建具有多个参数的复杂查询。当前的sql是一个简单的select。

<sql:query
   var="result"
   dataSource="${dSource}"
   sql="select * from TABLE ">
</sql:query>

我如何获取我的 Java ResultSet(即 rs = stmt.executeQuery(sql);)并使结果在我的 JSP 中可用,以便我可以执行这本教科书 JSP?

为了更清楚,我想删除上面的查询并将其替换为 Java。

<%
  ResultSet rs = stmt.executeQuery(sql); // Messy code will be in some Controller
%>
<c:forEach var="row" items="${result.rows}">
  <c:out value="${row.name}"/>
</c:forEach>

我是在 Java 部分设置 session /页面变量,还是有一些 EL 技巧可以用来访问变量?

最佳答案

模型(行):

public class Row { 
    private String name;
    // Add/generate constructor(s), getters and setters.
}

道:

public List<Row> list() throws SQLException {
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
    List<Row> rows = new ArrayList<Row>();

    try {
        connection = database.getConnection();
        statement = connection.createStatement();
        resultSet = statement.executeQuery(SQL_LIST);
        while (resultSet.next()) {
            Row row = new Row();
            row.setName(resultSet.getString("name"));
            // ...
            rows.add(row);
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
        if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
    }

    return rows;
}

Controller (servlet):

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        List<Row> rows = someDAO.list();
        request.setAttribute("rows", rows);
    } catch (SQLException e) {
        request.setAttribute("error", "Retrieving rows failed.");
        e.printStackTrace();
    }
    request.getRequestDispatcher("page.jsp").forward(request, response);
}

View (page.jsp):

<c:forEach items="${rows}" var="row">
    <c:out value="${row.name}" />
    ...
</c:forEach>
<c:if test="${not empty error}">Error: ${error}</c:if>

关于java - 如何使 Java ResultSet 在我的 jsp 中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/384189/

相关文章:

java - 将 JDBC 与 Oracle DB 一起使用时,如何查找连接是否真的超时或凭据是否错误?

java - 使用 JDBC 从 Oracle 获取唯一索引的所有外键

Java:我们是否应该尽快退出 try-with-resource block 以释放资源?

java - 在另一个 Activity 中显示选定的图像

java - 使用正则表达式检查字符串是否至少有两个数字

java - 获取转发后的jsp内容

java - JSP生成Excel电子表格(XLS)下载

jsp - EL 中 2 个变量的串联

sql - PostgreSQL 在发送参数时要求 'group by' 子句

java - 对音频信号实现高通滤波器