本实验的主要任务是设计一个封装所有连接数据库操作的 JavaBean,以简化 JSP 页面中对数据库的访问,提高代码的可重用性。并在图书信息维护时,借助一个业务 JavaBean 实现相应功能。实验首先进入添加图书页面,用户输入图书号、书名、作者、出版社、出版日期、库存、原价、现价,选择图书封面图片后,图书信息传递到 JavaBean 对象中,调用业务方法 addBook()将图书信息插入到数据库的 book 表中,然后重定向到图书显示页面(bookList.jsp),从数据库 book 表取出所有图书信息显示
以下是我编写的代码:
1.bookAdd1.html
2.doBookAdd1.jsp
但是HashMap出现了问题,后来我再import中加入了pojo.Book就好了,如下图
后来运行程序出现如下情况
于是我修改了代码尝试先输出获取的内容,如下图
然后运行程序后发现HashMap中,books没有成功获取输入的图书号等信息,如下图
问题就出现在这里,谁可以解答一下,实在是不知道为啥
以下是涉及到的相关代码
3.book.java
package pojo;
public class Book {
private String bookNo;//图书号
private String bookCover;//图书封面
private String bookName;//图书名称
private float nowPrice;//图书现价
private float orgPrice;//图书原价
private int comments;//对该图书现有的评论条数
private String author;//作者
private String pressDate;//出版日期
private String press;//出版社
private int bookNum;//库存
private int buyNum=0;//购买数量
public String getBookNo() {
return bookNo;
}
public void setBookNo(String bookNo) {
this.bookNo = bookNo;
}
public String getBookCover() {
return bookCover;
}
public void setBookCover(String bookCover) {
this.bookCover = bookCover;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public float getNowPrice() {
return nowPrice;
}
public void setNowPrice(float nowPrice) {
this.nowPrice = nowPrice;
}
public float getOrgPrice() {
return orgPrice;
}
public void setOrgPrice(float orgPrice) {
this.orgPrice = orgPrice;
}
public int getComments() {
return comments;
}
public void setComments(int comments) {
this.comments = comments;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPressDate() {
return pressDate;
}
public void setPressDate(String pressDate) {
this.pressDate = pressDate;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public int getBookNum() {
return bookNum;
}
public void setBookNum(int bookNum) {
this.bookNum = bookNum;
}
public int getBuyNum() {
return buyNum;
}
public void setBuyNum(int buyNum) {
this.buyNum = buyNum;
}
}
4.bookDB.java
package beans;
import java.sql.*;
import java.util.HashMap;
import util.DBConn;
import pojo.Book;
public class BookDB extends DBConn{
public HashMap<String,Book> selectBook() {
HashMap<String,Book> books=new HashMap<String,Book>();
if (conn!=null) {
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from book");
while(rs.next()) {
Book book=new Book();
book.setBookNo(rs.getString("bookNo").trim());
book.setBookCover(rs.getString("bookCover"));
book.setBookName(rs.getString("bookName"));
book.setNowPrice(rs.getFloat("nowPrice"));
book.setOrgPrice(rs.getFloat("orgPrice"));
book.setComments(rs.getInt("comments"));
book.setAuthor(rs.getString("author"));
book.setPressDate(rs.getString("pressDate"));
book.setPress(rs.getString("press"));
book.setBookNum(rs.getInt("bookNum"));
books.put(book.getBookNo(),book);
}
rs.close();
} catch(SQLException ex) {
System.err.println(ex.getMessage());
}
}
return books;
}
public int addBook(Book book) {
int result = 0;
if (conn!=null) {
try {
PreparedStatement pst = conn.prepareStatement("insert into book values(?,?,?,?,?,?,?,?,?,?)");
pst.setString(1, book.getBookNo());
pst.setString(2, book.getBookCover());
pst.setString(3, book.getBookName());
pst.setFloat(4, book.getNowPrice());
pst.setFloat(5, book.getOrgPrice());
pst.setInt(6, book.getComments());
pst.setString(7, book.getAuthor());
pst.setString(8, book.getPress());
pst.setString(9, book.getPressDate());
pst.setInt(10, book.getBookNum());
result = pst.executeUpdate();
conn.close();
} catch(SQLException ex) {
System.err.println(ex.getMessage());
}
}
return result;
}
}
5.DBConn.java
package util;
import java.sql.*;
public class DBConn {
private String dbDriver ="com.mysql.cj.jdbc.Driver";
private String connStr ="jdbc:mysql://localhost:3306/booklib?useSSL=false&serverTimezone=UTC";
private String username="root";
private String password="";
protected Connection conn = null;
public DBConn() {
Connection con = null;
try {
Class.forName(dbDriver);
con = DriverManager.getConnection(connStr,username,password);
}
catch(java.lang.ClassNotFoundException e) {
System.err.println( e.getMessage());
}
catch(SQLException e) {
System.err.println( e.getMessage());
}
this.conn=con;
}
public void close(){
try{
if (conn!=null) conn.close();
}
catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
6.bookList1.jsp
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.*,pojo.Book"%>
<jsp:useBean id="bookDB" class="beans.BookDB" />
<%
HashMap<String, Book> books = (HashMap<String, Book>)bookDB.selectBook();
session.setAttribute("books",books);
%>
<head>
<title>叮当图书网</title>
<link type="text/css" href="css/bookList.css" rel="stylesheet" />
</head>
<body>
<%
if (books == null || books.size() == 0) {
%>
<div>没有商品可显示!</div>
<% } else { %>
<div>
<ul>
<%
Book book;
for (HashMap.Entry<String, Book> entry:books.entrySet()){
book=(Book)entry.getValue();
%>
<li><a class="pic" href="" target="_blank">
<img src='images/<%=book.getBookCover()%>' />
</a>
<div class="desc">
<p><a href="" target="_blank"><%=book.getBookName() %></a></p>
<p><span>现价:¥<%=book.getNowPrice() %></span>
<span class="price"> 定价:<span>¥<%=book.getOrgPrice() %></span></span>
</p>
<p><span class="star"></span><a href="" target="_blank"><%=book.getComments() %>条评论</a></p>
<p><span><a href=""><%=book.getAuthor() %></a> 著</span>
<span>/<%=book.getPressDate() %></span>
<span>/<a href=""><%=book.getPress() %></a></span>
</p>
<p class="detail"></p>
<div>
<p><a class="bn" href="doCar.jsp?action=buy&bookNo=<%=entry.getKey()%>">加入购物车</a>
<a class="bn" href="">收藏</a>
</p>
</div>
</li>
<% } %>
</ul>
<div class="bncar">
<a class="bn" href='showCar.jsp'>查看购物车</a>
</div>
</div>
<%
}
%>
</body>