人 九 2023-11-20 22:36 采纳率: 66.7%
浏览 8
已结题

JavaBean的应用:增加图书

本实验的主要任务是设计一个封装所有连接数据库操作的 JavaBean,以简化 JSP 页面中对数据库的访问,提高代码的可重用性。并在图书信息维护时,借助一个业务 JavaBean 实现相应功能。实验首先进入添加图书页面,用户输入图书号、书名、作者、出版社、出版日期、库存、原价、现价,选择图书封面图片后,图书信息传递到 JavaBean 对象中,调用业务方法 addBook()将图书信息插入到数据库的 book 表中,然后重定向到图书显示页面(bookList.jsp),从数据库 book 表取出所有图书信息显示

以下是我编写的代码:
1.bookAdd1.html

img

img

2.doBookAdd1.jsp

img

但是HashMap出现了问题,后来我再import中加入了pojo.Book就好了,如下图

img

后来运行程序出现如下情况

img

img

img

于是我修改了代码尝试先输出获取的内容,如下图

img

然后运行程序后发现HashMap中,books没有成功获取输入的图书号等信息,如下图

img


问题就出现在这里,谁可以解答一下,实在是不知道为啥
以下是涉及到的相关代码
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>现价:&yen;<%=book.getNowPrice() %></span>
                       <span class="price">&nbsp;&nbsp;定价:<span>&yen;<%=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>&nbsp;</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>


  • 写回答

2条回答 默认 最新

  • 关注

    img


    你这里是创建了一个Book对象,但是并没有给属性赋值,所以属性都是空的
    你表单提交的数据和这个bean没关系
    你应该从request里拿到表单输入的参数,再set到这个bean里

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • 夜郎king 2022博客之星IT其它领域TOP 12 2023-11-21 08:47
    关注

    看报错信息是bookNo这个属性为空了,是不是新增的时候没取到值导致数据库执行报错了。

    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月30日
  • 已采纳回答 11月22日
  • 创建了问题 11月20日

悬赏问题

  • ¥30 哈夫曼编码译码器打印树形项目
  • ¥20 求完整顺利登陆QQ邮箱的python代码
  • ¥15 怎么下载MySQL,怎么卸干净原来的MySQL
  • ¥15 网络打印机Ip地址自动获取出现问题
  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色