在servlet中从数据库中获取完整的行并使用bean类将它们传递给jsp

Posted

技术标签:

【中文标题】在servlet中从数据库中获取完整的行并使用bean类将它们传递给jsp【英文标题】:get complete rows from database in servlet and pass them to jsp using bean class 【发布时间】:2014-05-06 07:10:11 【问题描述】:

我在数据库中有一个表,其中有一些字段,并且有一个带有一些私有字段、setter 和 getter 方法的 bean 类我试图检索使用 jdbc 概念并在这些方法上设置字符串值并在创建实例之后我在 jsp 页面中调用它们,它仅在第一列中打印一些像这样的地址,剩下的是空的 com.emp.TimeDetailBean@19bd846 请任何人帮助我 这是我的 bean 类...

private String intime;
private String outtime;
private String date;
private String eid;

public String getInTime() 
    return intime;


public void setInTime(String intime) 
    this.intime = intime;


public String getOutTime() 
    return outtime;


public void setOutTime(String outtime) 
    this.outtime = outtime;


public String getEid() 
    return eid;


public void setEid(String eid) 
    this.eid = eid;


public String getDate() 
    return date;


public void setDate(String date) 
    this.date = date;

这是我的 sevlet 代码

public class TimeDetail1 extends HttpServlet 

    @SuppressWarnings("unchecked")
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, java.io.IOException 

        HttpSession session = request.getSession(true);
        String eid = (String) session.getAttribute("eid");
        int count = 0;
        Connection con = ConnectionManager.getConnection();
        try 
            Statement st = con.createStatement();

            String Query = "select date, intime, outtime, eid  from fulltime where eid='"
                    + eid + "'";

            List<TimeDetailBean> ee = new ArrayList<TimeDetailBean>();
            ResultSet rs = st.executeQuery(Query);

            while (rs.next()) 
                TimeDetailBean e = new TimeDetailBean();
                e.setDate(rs.getString(1));
                e.setInTime(rs.getString(2));
                e.setOutTime(rs.getString(3));
                e.setEid(rs.getString(4));
                ee.add(e);
            

            request.getSession().setAttribute("ee", ee);
            RequestDispatcher rd = getServletContext().getRequestDispatcher(
                    "/TimeDetail.jsp");
            rd.forward(request, response);

         catch (Throwable theException) 
            System.out.println(theException);
        
    

现在jsp代码是

<%if(session.getAttribute("eid")==null)

    String message ="please login first";
    request.setAttribute("message", message);
    request.getRequestDispatcher("index.jsp").forward(request, response);

%>

<caption><h2>List of user timing</h2></caption>
<tr>
    <th>date</th>
    <th>intime</th>
    <th>outtime</th>
    <th>eid</th>
</tr>

<c:forEach items="$ee" var="item">
    <tr>
        <td>$item</a></td>
    </tr>
</c:forEach>  

【问题讨论】:

【参考方案1】:

尝试像下面那样迭代for-each 循环以从各个字段中获取值,

<c:forEach items="$ee" var="item">
    <tr>
        <td>$item.date</td>
        <td>$item.intime</td>
        <td>$item.outtime</td>
        <td>$item.eid</td>
    </tr>
</c:forEach>  

希望这会有所帮助!!

【讨论】:

当您从数据库中检索时,尝试打印您的值。并检查您是否有所有字段的数据 不,尝试使用我在回答中提到的变量名 先生,我已经回答了我上面的问题,但工作不正常我已经解释了那里的问题,除此之外我可以看到数据库中的字段值以及你告诉它的方式在控制台 org.apache.jasper.JasperException 上显示一些错误:在第 36 行处理 JSP 页面 /TimeDetail.jsp 时发生异常,如下所示... 是的先生它返回错误我已经在我之前的评论中告诉过你这样的 org.apache.jasper.JasperException: An exception occurred processing JSP page /TimeDetail.jsp at line 36 33: 34: 35: $item.date 36: $item.intime 37: $item.outtime 38: $item.eid 39: tr> 堆栈跟踪: 【参考方案2】:

这对我来说每次都很好 -

<logic:iterate name="ee" id="item">
  <td>$item.intime</td>
  <td>$item.outtime</td>
  <td>$item.date</td>
  <td>$item.eid</td>
</logic:iterate>

或者

 <c:forEach items="ee" var="item">
    <bean:write name="item" property="intime"/>
    <bean:write name="item" property="outime"/>
    <bean:write name="item" property="date"/>
    <bean:write name="item" property="eid"/>
 </c:forEach>

并从您的代码中的items=" " 中删除$

EDIT

在你的 bean 文件中制作

private Date date;
private Time intime, outtime;
// getter and setter methods

在你的动作类中使用

rs.getTime(1);
rs.getDate(2);

还有一件事,在你的 bean 文件中使用 import java.sql.Date 因为 rs.getDate() 返回 java.sql.Date,而不是 java.util.Date

【讨论】:

当我使用第一个时,两者都不起作用,它返回一些行但为空,当使用第二个时,只返回字段的标题,甚至没有空行......所以两者都不起作用.. .先生审查我的完整代码可能有一些错误... @sourav78611 数据库中字段的数据类型是什么? eid 是 varchar,日期是日期类型,intime 和 outtime 是时间类型,除了先生,当我使用 getEid 时,就像在打印步骤里面一样:每个时间都在打印,但只有一行最后一个,所以数据类型没有问题.. @sourav78611 是的。要么在数据库中将它们的数据类型全部设置为 varchar,要么在 bean 中更改数据类型。 我无法将日期设置为 varchar 你告诉我我应该怎么做才能更改 bean 类中的数据类型我的整个代码都写在上面告诉我.. 我应该怎么做..?

以上是关于在servlet中从数据库中获取完整的行并使用bean类将它们传递给jsp的主要内容,如果未能解决你的问题,请参考以下文章

我无法使用 jQuery 发布特定行并获取字段的值,我获取第一行的值而不是提交的行

在Oracle中从表中删除重复行

如何在 API 函数调用上下文中从数据表中获取搜索的行

如果其他表中不存在 id,则获取不同的行并使用合并

获取最相似的行并按相似度排序 - 性能改进

UITableView中默认重新加载后如何记住选择的行并维护它们?