2016-07-14 78 views
-1

我试图通过使用sql语句将我的user2表和orders表加入到html表中的最后一列中添加订单的数量(我将userID设置为“用户“主键和userIDorders外键)和在我的Servlet类中使用setAttribute为了在我的jsp文件中使用EL。这是代码我现在在我的Servlet类,使用多个mysql表并在一个html表中显示

ps = conn 
       .prepareStatement("select * FROM user2 WHERE lastname LIKE '%" 
         + searchReq + "%'"); 
     rs = ps.executeQuery(); 

     while (rs.next()) { 
      user = new User(rs.getInt("userID"), rs.getString("username"), 
        rs.getString("password"), rs.getString("firstname"), 
        rs.getString("lastname"), rs.getString("Email"), 
        rs.getInt("age")); 
      listOfUsers.add(user); 

,并在我的jsp:

<table border="1" class="search-table"> 

    <tr> 
     <td>ID</td> 
     <td>Username</td> 
     <td>Password</td> 
     <td>First Name</td> 
     <td>Last Name</td> 
     <td>Email</td> 
     <td>Age</td> 
     <td>Orders</td> 


    </tr> 

    <c:forEach items="${requestScope.lou}" var="current"> 
     <tr> 
      <td><c:out value="${current.id}" /></td> 
      <td><c:out value="${current.username}" /></td> 
      <td><c:out value="${current.password}" /></td> 
      <td><c:out value="${current.firstname}" /></td> 
      <td><c:out value="${current.lastname}" /></td> 
      <td><c:out value="${current.email}" /></td> 
      <td><c:out value="${current.age}" /></td> 
      <td><c:out value="${orders}" /></td> 


     </tr> 
    </c:forEach> 
</table> 

我的订单表中有用户ID,单编号,航运,并为列项目,我算通过使用orderID per userID的订单数量。

我只是不确定如何获得进入我的html表中的每一行的订单数,因为当我在“select * FROM user2 ... etc”语句中使用子查询时,它返回多行(因为它应该),但我不知道如何处理多行。还是有不同的方式来处理这个问题?

+1

你必须将这两个表连成一个。 – duffymo

回答

1

似乎你需要学习SQL

要将订单计数作为查询结果的额外列,请使用子查询(例如,

SELECT userID 
    , username 
    , password 
    , firstname 
    , lastname 
    , Email 
    , age 
    , (SELECT COUNT(*) 
      FROM orders o 
      WHERE o.userID = u.userID 
     ) AS orders 
    FROM user2 u 
WHERE lastname LIKE ? 

这SQL还使用参数标记(?),并通过调用一个PreparedStatementsetString()指定标记的值。

你做不是它使用字符串连接,除非你想让黑客使用SQL Injection窃取你的数据和/或删除你的表。

+0

感谢您的帮助! – episkeyyy

+0

我只是无法进入html表格。 – episkeyyy

0

以防万一有人想知道我做了什么与我上面得到的帮助,(我是初学者所以它绝对不是最好的答案或任何东西,它只是适用于什么,我要怎样做)

ps = conn 
       .prepareStatement("SELECT userID, username, password, firstname, lastname, email, age, (SELECT COUNT(*) FROM orders o WHERE o.userID = u.userID) AS orders FROM user2 u WHERE lastname LIKE ? "); 
     ps.setString(1, "%" + searchReq + "%"); 

     rs = ps.executeQuery(); 

     while (rs.next()) { 
      user = new User(rs.getInt("userID"), rs.getString("username"), 
        rs.getString("password"), rs.getString("firstname"), 
        rs.getString("lastname"), rs.getString("Email"), 
        rs.getInt("age")); 

      listOfUsers.add(user); 

      order = rs.getInt("orders"); 
      user.setOrders(order); 

再靠近我doPost方法request.setAttribute("orders", order);

在我的jsp

结束:

<c:forEach items="${requestScope.lou}" var="current"> 
     <tr> 
      <td><c:out value="${current.id}" /></td> 
      <td><c:out value="${current.username}" /></td> 
      <td><c:out value="${current.password}" /></td> 
      <td><c:out value="${current.firstname}" /></td> 
      <td><c:out value="${current.lastname}" /></td> 
      <td><c:out value="${current.email}" /></td> 
      <td><c:out value="${current.age}" /></td> 
      <td><c:out value="${current.orders}" /></td> 


     </tr> 
    </c:forEach> 

,并提出了在用户订单类的setter和getter。

相关问题