我正在尝试通过使用sql语句加入我的user2
表和orders
表来将订单数添加到html表的最后一列中(我创建了userID
在“user”主键和userID
外键中orders
并在我的Servlet类中使用setAttribute
以便在我的jsp文件中使用EL。这是我现在在Servlet类中的代码,
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>
我的订单表有userID,orderID,Shipping和item as columns,我通过每个userID使用orderID计算订单数。
我只是不确定如何获取进入html表中每一行的订单数量,因为当我在“select * FROM user2 ... etc”语句中使用子查询时,它会返回多行(因为它应该)但我不知道如何处理多行。或者有不同的方法来处理这个?
答案 0 :(得分: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还使用参数标记(?
),并通过调用setString()
的{{1}}来指定标记的值。
您使用字符串连接 NOT 执行此操作,除非您希望黑客使用SQL Injection窃取您的数据和/或删除您的表格。
答案 1 :(得分: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>
并为User类中的订单创建了setter和getter。