java - jSTL的sql标签是如何工作的?

标签 java jsp web-applications jstl

我正在使用以下代码从我的 jsp 查询数据库,但我想了解更多关于幕后发生的事情。

这是我的两个主要问题。

标签是直接访问ResultSet,还是将查询结果存储在内存中的数据结构中?

什么时候关闭连接?

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<sql:query var="query" dataSource="${ds}" sql="${listQuery}"></sql:query>
<c:forEach var="row" items="${query.rows}" begin="0">
    ${row.data }
    ${row.more_data }
</c:forEach>

注意:我一直反对在 jsp 中运行查询,但我的结果集太大而无法在我的操作和我的 jsp 之间存储在内存中。使用这个标签库看起来是最简单的解决方案。

最佳答案

基于 org.apache.taglibs.standard.tag.common.sql.QueryTagSupport 来源的观察

taglib 遍历 ResultSet 并将所有数据放入数组、Map 和 List 中。因此,在您开始循环之前,一切都已加载到内存中。

当遇到查询开始标签时打开连接(doStartTag 方法)。当遇到查询结束标记时检索结果(doEndTag 方法)。连接在 doFinally 方法中关闭。

简而言之,这绝对是糟糕的。

关于java - jSTL的sql标签是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/95134/

相关文章:

java - 在 switch case 中使用枚举的序号而不是使用枚举有什么重要的理由吗?

html - 使用类在 CSS 中创建菜单

javascript - 如何从 node.js 中的 http.request 向浏览器发送响应?

java - 如何使用 if 语句将 URL 解析为某个 IP 地址?

java - 扫描仪输入匹配异常

java - JSP页面如何找到正确的参数 setter

mysql - spring mysql hibernate中的外键引用

java - 地址已在使用 : JVM_Bind java

linux - 依赖于客户端机器的基于浏览器的应用程序的身份验证

java - 什么是 NullPointerException,我该如何解决?