上机设计题:根据输入的图书名称和出版社号进行图书信息的查询,使用JSTL实现组合条件的四种查询。
时间: 2024-02-23 18:03:09 浏览: 18
好的,我会尽力回答你的问题。首先,我们需要创建一个包含图书信息的数据库,并确保数据库连接已经配置好。然后,我们需要编写一个JSP页面,用于接收用户输入的查询条件。接下来,我们可以使用JSTL标签库来处理这些查询条件。
下面是一个示例JSP页面,用于接收用户输入的查询条件:
```
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>图书查询</title>
</head>
<body>
<h1>图书查询</h1>
<form method="post" action="query.jsp">
<p>图书名称:<input type="text" name="bookName"></p>
<p>出版社号:<input type="text" name="publisherId"></p>
<p>
<input type="radio" name="queryType" value="and" checked>查询条件同时满足<br>
<input type="radio" name="queryType" value="or">查询条件满足任意一个<br>
</p>
<p><input type="submit" value="查询"></p>
</form>
</body>
</html>
```
在这个页面中,我们使用了JSTL标签库的核心标签,包括<c:if>、<c:forEach>和<c:set>等标签。我们还使用了表单元素,让用户输入查询条件。
接下来,我们需要编写一个处理查询条件的JSP页面。假设我们的查询条件是图书名称和出版社号,我们可以使用JSTL的<c:choose>标签和<c:when>标签来处理这些条件。以下是一个示例:
```
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*,java.util.*,java.text.*" %>
<html>
<head>
<title>图书查询结果</title>
</head>
<body>
<h1>图书查询结果</h1>
<c:set var="bookName" value="${param.bookName}" />
<c:set var="publisherId" value="${param.publisherId}" />
<c:set var="queryType" value="${param.queryType}" />
<sql:setDataSource
var="dataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/bookstore"
user="root"
password="password"/>
<c:choose>
<c:when test="${not empty bookName and not empty publisherId}">
<c:choose>
<c:when test="${queryType == 'and'}">
<sql:query var="queryResult" dataSource="${dataSource}">
SELECT * FROM books
WHERE book_name LIKE '%${bookName}%' AND publisher_id = ${publisherId}
</sql:query>
</c:when>
<c:when test="${queryType == 'or'}">
<sql:query var="queryResult" dataSource="${dataSource}">
SELECT * FROM books
WHERE book_name LIKE '%${bookName}%' OR publisher_id = ${publisherId}
</sql:query>
</c:when>
</c:choose>
</c:when>
<c:when test="${not empty bookName}">
<sql:query var="queryResult" dataSource="${dataSource}">
SELECT * FROM books
WHERE book_name LIKE '%${bookName}%'
</sql:query>
</c:when>
<c:when test="${not empty publisherId}">
<sql:query var="queryResult" dataSource="${dataSource}">
SELECT * FROM books
WHERE publisher_id = ${publisherId}
</sql:query>
</c:when>
<c:otherwise>
<p>请输入查询条件</p>
</c:otherwise>
</c:choose>
<c:if test="${not empty queryResult.rows}">
<table border="1">
<tr>
<th>图书ID</th>
<th>图书名称</th>
<th>作者</th>
<th>出版社ID</th>
<th>价格</th>
</tr>
<c:forEach var="row" items="${queryResult.rows}">
<tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.book_name}"/></td>
<td><c:out value="${row.author}"/></td>
<td><c:out value="${row.publisher_id}"/></td>
<td><c:out value="${row.price}"/></td>
</tr>
</c:forEach>
</table>
</c:if>
<sql:close dataSource="${dataSource}" />
</body>
</html>
```
在这个JSP页面中,我们首先使用<c:set>标签来获取用户输入的查询条件。然后,我们使用<sql:setDataSource>标签来设置数据库连接。接下来,我们使用<c:choose>标签和<c:when>标签来处理不同的查询条件。如果同时输入了图书名称和出版社号,则根据查询类型("and"或"or")进行查询。如果只输入了图书名称或出版社号,则只根据该条件进行查询。如果没有输入任何查询条件,则显示一条提示信息。
最后,我们使用<c:if>标签和<c:forEach>标签来显示查询结果。
以上就是使用JSTL实现组合条件的四种查询的示例代码。希望对你有所帮助!