我正在尝试实现一个方法 find ,它将在mysql数据库中搜索带有我在JSP文本字段中输入的isbn的书。我的问题是如何在ManagerBook.java类中正确实现 find 方法,如何通过调用显示在同一个JSP页面上找到的书(如果在数据库中找到该书) 找到方法。看看我到目前为止编写的代码:
ManagerBook.java
public int findBook(int isbn) throws SQLException, ClassNotFoundException{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, user, password);
String find = "SELECT * from boo WHERE isbn = ?";
Statement stt = con.createStatement();
ResultSet rs = stt.executeQuery(find);
while(rs.next()){
int isbn1 = rs.getInt("isbn");
String title1 = rs.getString("title");
Book b2 = new Book();
b2.setIsbn(isbn1);
b2.setTitle(title1);
}
con.close();
stt.close();
rs.close();
return b2;
}
Book.java
package book;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Book {
private int isbn;
private String title;
@Id
public int getIsbn() {
return isbn;
}
public void setIsbn(int isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
find.jsp
<%@page import="java.util.*, book.*" %>
<jsp:useBean id = "bm" class="book.ManagerBook" scope = "session"/>
<%
int success = 0;
Boolean submitted = Boolean.parseBoolean(request.getParameter("submitted"));
if(submitted){
int isbn = Integer.parseInt(request.getParameter("isbn"));
success = bm.findBook(isbn);
}
%>
<h1> Welcome to ABC Library</h1>
<form>
<table>
<tr>
<td> Enter Details </td>
<td><input type="text" name="isbn"></td>
<td><input type="submit" name="find" value="find"></td>
</tr>
</table>
<input type="hidden" name="submitted" value="true">
</form>
<%
if((success == 1) && (submitted)){%> <h3> The book is found</h3> <br>
<table>
<tr>
<td colspan=2>
<h2>Book Found</h2>
</td>
</tr>
<tr>
<td><h3>ISBN</h3></td>
<td><h3>Title</h3></td>
</tr>
<tr>
<td><%=bm.getIsbn() %></td>
<td><%=bm.getTitle() %></td>
</tr>
</table>
<%} else if (submitted){ %>
<h3> Book not found</h3>
<% } %>
谢谢&amp;亲切的问候.. :)
答案 0 :(得分:2)
您的findBook方法的返回类型为int,但实际上它返回的是Book类型的对象。所以它不会编译。
您可以在ManagerBook类中声明一个类型为Book的实例变量,比如说
Book searchedBook;
现在在findBook方法中,将此变量值设置为SQL查询返回的书,并返回一个int值。
在JSP中,您可以使用:
<tr>
<td><%=bm.getSearchedBook().getIsbn() %></td>
<td><%=bm.getSearchedBook().getTitle() %></td>
</tr>
答案 1 :(得分:0)
你的编码有很多问题。
使用PreparedStatement
代替Statement
以避免sql injection
并快速performance
。
使用while(rs.next())
来检查条件,而不是if(rs.next())
Book b2 = new Book();
,它应该在循环之外(方法的开头)。
最后return
b2
。
将return
类型的findBook(-)
方法从int
更改为Book
。自返回b2
后,Book
的对象。
而不是
public int findBook(int isbn) throws SQLException, ClassNotFoundException{
return b2;
}
使用
public Book findBook(int isbn) throws SQLException, ClassNotFoundException{
Book b2=new Book();
....................
return b2;
}
JSP
中,而不是success = bm.findBook(isbn);
使用Book bm = bm.findBook(isbn);
。由于return
类型的findBook()
方法现在为Book
。