【问题标题】:How to display a database table in the JSP page如何在 JSP 页面中显示数据库表
【发布时间】:2015-09-20 22:00:12
【问题描述】:

我试图在我的 JSP 页面中的一个表上显示我的用户表。但是当我运行 JSP 页面时没有显示数据。

我有一个名为“eyetracker”的 mySQL 架构和一个名为“user”的表。感谢您的帮助.. 如果可能的话,我想通过使用 servlet 检索 mySQL 数据并将其显示在 JSP 页面中...

<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>

<form method="post">

<table border="2">
   <tr>
        <td>user ID</td>
        <td>Birthday</td>
        <td>Gender</td>
        <td>First Name</td>
        <td>Last Name</td>
   </tr>
   <%
   try
   {
       Class.forName("com.mysql.jdbc.Driver");
       String url="jdbc:mysql://localhost:3306/eyetracker";
       String username="root";
       String password="root";
       String query="select * from eyetracker";
       Connection conn=DriverManager.getConnection(url, username, password);
       Statement stmt=conn.createStatement();
       ResultSet rs=stmt.executeQuery(query);
       while(rs.next())
       {
   %>
           <tr><td><%rs.getInt("userID"); %></td></tr>
           <tr><td><%rs.getDate("dob"); %></td></tr>
           <tr><td><%rs.getString("gender"); %></td></tr>
           <tr><td><%rs.getString("firstName"); %></td></tr>
           <tr><td><%rs.getString("lastName"); %></td></tr>

   <%
       }
   %>
   </table>
   <%
        rs.close();
        stmt.close();
        conn.close();
   }
   catch(Exception e)
   {
        e.printStackTrace();
   }
   %>
</form>`

【问题讨论】:

  • 您检查过您的ResultSet rs 是否有任何行吗?也就是说,您是否甚至进入了while 循环?
  • 将您的查询更改为select * from user,并确保您已将mysql jar 放入WEB-INF/lib

标签: java mysql jsp


【解决方案1】:

更新您的小代码,如下所示,

%>

       <tr><td><%out.println(rs.getInt("userID")); %></td></tr>
       <tr><td><%out.println(rs.getDate("dob")); %></td></tr>
       <tr><td><%out.println(rs.getString("gender")); %></td></tr>
       <tr><td><%out.println(rs.getString("firstName")); %></td></tr>
       <tr><td><%out.println(rs.getString("lastName")); %></td></tr>
       <tr><td><%=rs.getInt("userID"); %></td></tr>
       <tr><td><%=rs.getDate("dob"); %></td></tr>
       <tr><td><%=rs.getString("gender"); %></td></tr>
       <tr><td><%=rs.getString("firstName"); %></td></tr>
       <tr><td><%=rs.getString("lastName"); %></td></tr>

【讨论】:

  • 您可能想要添加更改的原因和内容。这样会更清楚。
【解决方案2】:

在 JSP 中,如果你想在 HTML DOM 中添加动态内容,你需要这样做

<tr><td><%=rs.getInt("userID"); %></td></tr>
<tr><td><%=rs.getDate("dob"); %></td></tr>
<tr><td><%=rs.getString("gender"); %></td></tr>
<tr><td><%=rs.getString("firstName"); %></td></tr>
<tr><td><%=rs.getString("lastName"); %></td></tr>

注意上面代码中的=

您的代码中缺少这些,因此代码只是提取值而不是将它们插入 HTML DOM。

<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.Statement" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>

<form method="post">

<table border="2">
<tr>
<td>user ID</td>
<td>Birthday</td>
<td>Gender</td>
<td>First Name</td>
<td>Last Name</td>
</tr>
<%
try
{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/eyetracker";
String username="root";
String password="root";
String query="select * from user";
Connection conn=DriverManager.getConnection(url, username, password);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(query);
while(rs.next())
{

%>
<tr><td><%=rs.getInt("userID") %></td></tr>
<tr><td><%=rs.getDate("dob") %></td></tr>
<tr><td><%=rs.getString("gender") %></td></tr>
<tr><td><%=rs.getString("firstName") %></td></tr>
<tr><td><%=rs.getString("lastName") %></td></tr>

 <%

}
%>
</table>
<%
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
%>
</form>

【讨论】:

    【解决方案3】:

    表达式标签将用于在 JSP 页面中显示值。表达式标记转换为 Java 语句。但是您使用 Scriptlet 标签允许您在 JSP 服务器页面中嵌入任何有效的 Java 源代码。

    结果来自数据库,然后会正常显示。

    <tr><td><%=rs.getInt("userID"); %></td></tr>
    <tr><td><%=rs.getDate("dob"); %></td></tr>
    <tr><td><%=rs.getString("gender"); %></td></tr>
    <tr><td><%=rs.getString("firstName"); %></td></tr>
    <tr><td><%=rs.getString("lastName"); %></td></tr>
    

    【讨论】:

      【解决方案4】:

      如果类路径中没有 jdbc 驱动程序,则错误会进入应用程序服务器输出,因为您有一行 e.printStackTrace();。 尝试改变:

      catch(Exception e) {
         e.printStackTrace();
      }
      

      与:

      catch(Exception e) {
         e.printStackTrace();
         out.println("<h1> error: "+ e.getMessage()+"</h1>");
      }
      

      看看你的jdbc驱动有没有问题

      【讨论】:

        【解决方案5】:

        不只是Expression标签转换成Java,Full JSP文件转换成Servlet,所以使用任意一个Expression或Scriptlet标签。

        【讨论】:

          【解决方案6】:

          很好的解决方案,在我的桌子上尝试了同样的方法,但是

           <tr><td><%=rs.getString("column1") %></td
           <td><%=rs.getInt("column2") %></td></tr>
          

          只打印第一列的第一个值,然后循环停止。它仅适用于 varchar 类型的列,但不适用于 int 类型的列。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-10
            • 2016-09-11
            • 2013-03-16
            • 2017-11-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多