2016-07-14 22 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。

相關問題