动态将表中的数据检索到jsp中

Posted

技术标签:

【中文标题】动态将表中的数据检索到jsp中【英文标题】:Retrieve data from tables into jsp dynamically 【发布时间】:2012-12-03 10:59:31 【问题描述】:

我有以下代码从 Oracle 表中检索数据。这工作正常。

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@include file="DBCon.jsp" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body><table>
        <%
        String a=request.getParameter("type").trim();
        String b=request.getParameter("user").trim();
        String c=request.getParameter("from").trim();
        String d=request.getParameter("to").trim();
        ResultSetMetaData rsmd;
        String st="SELECT type, Hari, Rakesh, Total FROM (select (type),  max( decode( SPECIALIST, 'Hari', cnt, null ) ) Hari,  max( decode( SPECIALIST, 'Rakesh', cnt, null ) ) Rakesh,  Sum(cnt) total  from ( select (type),specialist, sum(update_count) cnt  from scope1 where (RECVD_DATE >='"+c+"' and RECVD_DATE <='"+d+"')  group by (type),specialist ) q  group by (type)  Union Select 'Total' as type, Sum(Hari) Hari,Sum(Rakesh) Rakesh,Sum(total) Total from (  select (type),  max( decode( SPECIALIST, 'Hari', cnt, null ) ) Hari,  max( decode( SPECIALIST, 'Rakesh', cnt, null ) ) Rakesh,  Sum(cnt) total  from ( select (type),specialist, sum(update_count) cnt  from scope1 where (RECVD_DATE >='"+c+"' and RECVD_DATE <='"+d+"')  group by (type),specialist ) q  group by (type)  )a) b Order by Total";        
try%>
        <tr><b><%=b%></b></tr><%
            //String sql=(st);
            //out.print(sql);
            ps1=con.prepareStatement(st);
            rs1=ps1.executeQuery();
            rsmd=rs1.getMetaData();
            int cou=rsmd.getColumnCount();
            for(int i=1;i<cou;i++)
            %>
        <td><%=rsmd.getColumnName(i)%>
        <%
                   
            %>
        <td>Total</td>
        <%
            while(rs1.next())
            
            %>

            <tr><td><b><%=rs1.getString(1)%></b></td><td><%=rs1.getString(2)%></td><td><%=rs1.getString(3)%></td><td><%=rs1.getString(4)%> </td></tr>
            <%
            
        
        catch(Exception e)
        
            out.println(e);

%>
   </table> </body>
</html>

但是在这里,我需要你们的帮助,我可以使下面的语句动态化。

<tr><td><b><%=rs1.getString(1)%></b></td><td><%=rs1.getString(2)%></td><td><%=rs1.getString(3)%></td><td><%=rs1.getString(4)%> </td></tr>

这里使用的sql语句如下。

SELECT type, Hari, Rakesh, Total FROM (select (type),  max( decode( SPECIALIST, 'Hari', cnt, null ) ) Hari,  max( decode( SPECIALIST, 'Rakesh', cnt, null ) ) Rakesh,  Sum(cnt) total  from ( select (type),specialist, sum(update_count) cnt  from scope1 where (RECVD_DATE >='"+c+"' and RECVD_DATE <='"+d+"')  group by (type),specialist ) q  group by (type)  Union Select 'Total' as type, Sum(Hari) Hari,Sum(Rakesh) Rakesh,Sum(total) Total from (  select (type),  max( decode( SPECIALIST, 'Hari', cnt, null ) ) Hari,  max( decode( SPECIALIST, 'Rakesh', cnt, null ) ) Rakesh,  Sum(cnt) total  from ( select (type),specialist, sum(update_count) cnt  from scope1 where (RECVD_DATE >='"+c+"' and RECVD_DATE <='"+d+"')  group by (type),specialist ) q  group by (type)  )a) b Order by Total

我希望检索数据,例如

<%=rs1.getString(i)%>

谢谢

【问题讨论】:

【参考方案1】:
<%
for (int i = 1; i < 5; i++) 
%>

<td><%= rs1.getString(i) %></td>

<%

%>

但我永远不会那样做。 JSP 不应使用 scriptlet。他们不应该执行数据库查询。他们唯一的工作应该是使用存储在请求属性中的对象生成 HTML 标记。

SQL 查询应该在您首选的 MVC 框架的 servlet 或操作中。此 servlet 将获取数据,将其存储在 List&lt;MyObject&gt; 中,将此列表放入请求属性中,然后转发给 JSP。

然后,JSP 将使用 JSTL 和 JSP EL(以及其他自定义标记,如果需要),以显示此 List&lt;MyObject&gt;

【讨论】:

以上是关于动态将表中的数据检索到jsp中的主要内容,如果未能解决你的问题,请参考以下文章

ABAP 中内表的复制

jsp servlet应用程序中动态表上的编辑按钮

jsp页面中如何动态创建表格的行列

如何将表中的所有td对齐在同一行中

Ssm框架下怎么把数据库数据动态显示到前端页面?

通过动态增加拆分在 oracle 中创建拆分分区