将数据库中的表格信息输出到页面上

本文介绍如何使用JSP和Java创建学生信息展示页面,通过SQL查询从数据库获取学生数据,并利用JSP内置对象和EL表达式展示数据。文章还探讨了表格布局、单元格样式控制及按姓名查询功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在《JDBC操作数据库实例》这篇博客中,我们可以在java文件中通过SQL查询语句将学生表中的学生信息输出到控制台。

本篇博客将实现将学生信息显示到页面上。


在test1项目(或者说是test1模块)的web目录下新建student.jsp文件。

文件内容如下:

<%@ page import="com.test1.db.StudentDb" %>
<%@ page import="java.util.List" %>
<%@ page import="com.test1.entity.Student" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>学生信息显示页面</title>
</head>
<body>
<table border="1" cellspacing="0">
    <tr>
        <td>学号</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>性别</td>
        <td>地区</td>
        <td>专业</td>
        <td>班级</td>
        <td>民族</td>
    </tr>

    <%
        StudentDb sdb = new StudentDb();
        String sql = "select * from student";
        List<Student> lst = sdb.getStudent(sql);
        for (Student stu : lst) {
            out.println("<tr><td>" + stu.getSid() + "</td><td>" + stu.getSname() + "</td><td>" + stu.getSage() + "</td><td>" + stu.getSsex() + "</td><td>" + stu.getSnativeplace() + "</td><td>" + stu.getSmajor() + "</td><td>" + stu.getSclass() + "</td><td>" + stu.getSnative() + "</td></tr>");
        }
    %>
</table>
</body>
</html>

其中:

<table border="1" cellspacing="0">...</table>用来定义表格的边框和单元格间距。

通过地址栏访问student.jsp文件,运行效果图如下所示: 

(火狐浏览器)student.jsp运行效果图

 如果想让表格中的单元格大小都相同,则可以在<head> 部分通过 <style>标签定义内部样式表,设定<td>标签属性,即单元格属性。

<head>
    <title>学生信息显示页面</title>
    <style>
        td {
            width: 80px;
            height: 25px;
        }
    </style>
</head>

表格由 <table> 标签来定义。每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由 <td> 标签定义)。字母 td 指表格数据(table data),即数据单元格的内容。数据单元格可以包含文本、图片、列表、段落、表单、水平线、表格等等。

如果对单元格不作任何限制,则在有些浏览器上会出现单元格中文本换行的现象,比如在QQ浏览器上运行,效果如下:

QQ浏览器上运行效果

如果对单元格的大小不作要求,只要求单元格中文本在一行显示,即单元格内文本不换行,可以指定<td>标签的white-space属性。

white-space属性指定元素内的空白怎样处理。

nowrap表示文本不换行,直到遇到<br>标签为止。

<head>
    <title>学生信息显示页面</title>
    <style>
        td {
            white-space:nowrap;
        }
    </style>
</head>

在QQ浏览器上运行效果如下:

QQ浏览器上运行效果图

将表格信息输出到页面上除了使用如上述代码中所写的foreach循环遍历学生对象列表,然后使用println()方法输出学生对象的各个属性值到页面外,还可以用JSP 表达式语言(EL)来访问数据。 (两者效果相同)

    <%
        StudentDb sdb = new StudentDb();
        String sname = request.getParameter("sname");
        String sql = null;
        if (sname == null) {
            sql = "select * from student";
        } else {
            sql = "select * from student where sname like '%" + sname + "%'";
        }
        List<Student> lst = sdb.getStudent(sql);
        request.setAttribute("stuLst", lst);
    %>
    <c:forEach items="${stuLst}" var="stu">
        <tr>
            <td>${stu.sid}</td>
            <td>${stu.sname}</td>
            <td>${stu.sage}</td>
            <td>${stu.ssex}</td>
            <td>${stu.snativeplace}</td>
            <td>${stu.smajor}</td>
            <td>${stu.sclass}</td>
            <td>${stu.snative}</td>
        </tr>
    </c:forEach>

在此基础上,增加按照姓名查询功能,如何实现?

详见下一篇博客《在数据显示页面增加按姓名查询功能

返回目录:《学生信息管理系统(Java+JSP)》 

<think>嗯,用户的问题是关于如何用ASP将数据库查询结果动态生成PDF表格。首先,我需要回忆一下之前提供的解决方案,并结合用户提供的站内引用。用户提到iText和iTextSharp,这些是生成PDF的工具,但用户现在用的是ASP,所以可能需要考虑COM组件或者服务器端生成的方法。用户之前的问题中,我提到了使用Persits.ASPPDF组件,所以可能需要继续沿用这个思路。但用户现在想填充数据库数据到表格,所以需要结合数据库查询和PDF生成。首先,用户需要连接到数据库,执行查询,获取结果集,然后循环遍历结果集,将数据插入到PDF的表格中。 引用中的iTextSharp是ASP.NET的库,但用户问的是传统ASP,所以可能需要调整。不过,用户可能允许使用第三方组件,比如Persits.PDF或其他支持表格生成的库。需要确保组件支持创建表格,并动态添加数据。步骤可能包括:连接数据库,执行查询,创建PDF对象,创建表格,循环数据填充表格,最后输出PDF到浏览器或保存。需要注意字体、样式和格式,确保表格美观。同时,用户可能需要处理分页、表头重复等问题。此外,引用中提到的Aspose.Word可能不直接相关,但如果有需要转换Word到PDF,可能涉及,但当前问题主要关注数据库到PDF表格。 还需要考虑权限问题,服务器是否安装了所需组件,以及性能问题,尤其是处理大量数据时的内存管理。可能还需要错误处理,比如数据库连接失败或查询异常时的处理。最后,生成相关问题时要围绕PDF生成、数据填充、性能优化等方面。</think>### 分步解决方案:使用ASP动态生成带数据库数据的PDF表格 #### 步骤1:数据库连接与数据获取 ```asp <% Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=SQLOLEDB;Data Source=服务器;Database=数据库名;User ID=用户;Password=密码;" ' 执行查询 Set rs = conn.Execute("SELECT 字段1, 字段2 FROM 表名 WHERE 条件") %> ``` #### 步骤2:使用PDF组件创建表格(以Persits.ASPPDF为例) ```asp <% Set Pdf = Server.CreateObject("Persits.Pdf") Set Doc = Pdf.CreateDocument ' 创建表格(假设查询结果有3列) Set Table = Doc.CreateTable(rs.RecordCount + 1, 3) ' 行数+表头,列数 Table.Cell(0,0).AddText "表头1", "font: Helvetica; size: 12; color: #0000FF" Table.Cell(0,1).AddText "表头2", "font: Helvetica-Bold; size: 14" ' 填充数据 row = 1 Do While Not rs.EOF Table.Cell(row,0).AddText rs("字段1").Value Table.Cell(row,1).AddText rs("字段2").Value rs.MoveNext row = row + 1 Loop ' 将表格添加到页面 Set Page = Doc.Pages.Add Page.Canvas.DrawTable Table, 50, Page.Height - 100 ' 定位坐标 %> ``` #### 步骤3:设置输出参数 ```asp <% Response.ContentType = "application/pdf" Response.AddHeader "Content-Disposition", "inline; filename=report.pdf" Doc.SaveToHttp 1 ' 直接输出到浏览器 %> ``` #### 步骤4:表格样式优化 - **边框设置**: ```asp Table.DefaultCell.BorderColor = "#000000" Table.DefaultCell.BorderWidth = 0.5 ``` - **交替行颜色**: ```asp For i = 1 To rs.RecordCount If i Mod 2 = 0 Then Table.Cell(i,0).BgColor = "#F0F0F0" Table.Cell(i,1).BgColor = "#F0F0F0" End If Next ``` #### 步骤5:处理分页与大数据量 当数据超过单页容量时,使用分页算法: ```asp <% Const MAX_ROWS_PER_PAGE = 30 totalPages = CInt(rs.RecordCount / MAX_ROWS_PER_PAGE) + 1 For p = 1 To totalPages Set Page = Doc.Pages.Add ' 计算当前页数据范围 startRow = (p-1)*MAX_ROWS_PER_PAGE endRow = p*MAX_ROWS_PER_PAGE ' 绘制当前页表格(需重新查询或缓存数据) Next %> ``` ### 关键注意事项 1. **组件选择**:推荐使用`Persits.ASPPDF`或`ABCpdf`等支持表格操作的COM组件,它们提供类似Excel的表格操作接口[^1] 2. **性能优化**:对于超过1000行的数据,建议分批次生成或使用流式处理 3. **字体嵌入**:使用中文字体时需显式声明: ```asp Doc.Fonts.Add "SimSun", True ' 嵌入宋体 Table.DefaultCell.Font = Doc.Fonts("SimSun") ``` 4. **数据安全**:使用参数化查询防止SQL注入: ```asp Set cmd = Server.CreateObject("ADODB.Command") cmd.Parameters.Append cmd.CreateParameter("@param", adVarChar, adParamInput, 50, 值) ``` ### 性能对比 使用传统ASP生成PDF表格时,处理时间与数据量的关系可表示为: $$ T(n) = O(n) + C $$ 其中$C$为固定开销(约200ms),当$n > 1000$时建议启用分页机制[^1]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值