JSP& Mysql - 在数据库中查找特定项

时间:2015-09-19 06:50:38

标签: java mysql jsp

我正在尝试实现一个方法 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;亲切的问候.. :)

2 个答案:

答案 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)

你的编码有很多问题。

  1. 使用PreparedStatement代替Statement以避免sql injection并快速performance

  2. 使用while(rs.next())来检查条件,而不是if(rs.next())

  3. Book b2 = new Book();,它应该在循环之外(方法的开头)。

  4. 最后return b2

  5. return类型的findBook(-)方法从int更改为Book。自返回b2后,Book的对象。

  6. 而不是

     public int findBook(int isbn) throws SQLException, ClassNotFoundException{
     return b2;
     }
    

    使用

    public Book findBook(int isbn) throws SQLException, ClassNotFoundException{
    Book b2=new Book();
    ....................
    return b2;
    }
    
    1. JSP中,而不是success = bm.findBook(isbn);使用Book bm = bm.findBook(isbn);。由于return类型的findBook()方法现在为Book