反方向的无奈 2022-03-01 00:21 采纳率: 80%
浏览 26
已结题

JSP书本查询问题,根据书本ID查询章节表里面的数据

问题遇到的现象和发生背景

想要建个小说网站,采集一些小说离线阅读
遇到问题,根据书本ID查询章节表里的数据

问题相关代码

问题:1、我的查询章节代码对不对?
2、jsp页面怎么去实现?

数据库:

CREATE TABLE `t_novel` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `novel_name` varchar(50) DEFAULT NULL,
  `novel_author` varchar(50) DEFAULT NULL,
  `novel_desc` varchar(255) DEFAULT NULL,
  `novel_image` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `t_chapter` (
  `id` int(225) NOT NULL,
  `title` varchar(50) DEFAULT NULL,
  `chapter` text,
  `novel_id` int(225) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
项目编号小说名字小说作者小说简介图片地址
字段idnovel_namenovel_authornovel_descnovel_image
类型intverchar(20)verchar(20)verchar(255)verchar(255)
项目编号章节名字章节内容书本编号
字段idtitlechapternovel_id
类型intvarchar(20)textint

相关代码:

// Model
public class Novel {
    public int id;
    public String novel_name;
    public String novel_author;
    public String novel_desc;
    public String novel_image;
// get and set
}

public class Chapter {
    public int id;
    public String title;
    public String chapter;
    public int novel_id;
    public Novel novel;
// get and set
}

//Dao 接口
public interface ChapterDao {
    public Chapter checkChapterList(int id);
    public Chapter getChapters(int id);
}

//Dao 接口实现
public class ChapterDaoImpl implements ChapterDao {
    //用ID查询小说所有信息
    @Override
    public Chapter checkChapterList(int id) {
        String sql = "select * from t_novel inner join t_chapter on t_novel.id = t_chapter.novel_id=?";
        DatabaseUtil databaseUtil = new DatabaseUtil();
        Connection conn = databaseUtil.openConnection();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            rs = pstmt.executeQuery();
            if(rs.next()) {
                Novel novel = new Novel();
                novel.setId(rs.getInt("id"));
                novel.setNovel_name(rs.getString("novel_name"));
                novel.setNovel_author(rs.getString("novel_author"));
                novel.setNovel_desc(rs.getString("novel_desc"));
                novel.setNovel_image(rs.getString("novel_image"));
                
                Chapter chapter = new Chapter();
                chapter.setId(rs.getInt("id"));
                chapter.setTitle(rs.getString("title"));
                chapter.setChapter(rs.getString("chapter"));
                chapter.setNovel(novel);
                
                return chapter;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            databaseUtil.closePreparedStatement(pstmt);
            databaseUtil.closeResultSet(rs);
            databaseUtil.closeConnection(conn);
        }
        return null;
        
    }
    //用id查询章节表所有信息  
    // 这个方法不知道有没有写正确
    @Override
    public Chapter getChapters(int id) {
        String sql = "select * from t_chapter where novel_id = ?";
        DatabaseUtil databaseUtil = new DatabaseUtil();
        Connection conn = databaseUtil.openConnection();
        List<Chapter> list = new ArrayList<Chapter>();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);
            rs = pstmt.executeQuery();
            while(rs.next()) {
                Chapter chapter = new Chapter();
                chapter.setId(rs.getInt("id"));
                chapter.setTitle(rs.getString("title"));
                chapter.setChapter(rs.getString("chapter"));
                list.add(chapter);
                
                return chapter;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            databaseUtil.closePreparedStatement(pstmt);
            databaseUtil.closeResultSet(rs);
            databaseUtil.closeConnection(conn);
        }
        return null;
    }

}

// chapter_list.jpg page
<%
    NovelDao novelDao = new NovelDaoImpl();
    List<Novel> novels = novelDao.getNovels();
    for(Iterator<Novel> it = novels.iterator();it.hasNext();){
        Novel novel = it.next();
%>
<a href="novel_list.jsp?CheckNovelById=<%=novel.getId() %>">
书本图片:<%=novel.getNovel_image() %>
书本名字:<%=novel.getNovel_name() %>
小说作者:<%=novel.getNovel_author() %>
小说简介:<%=novel.getNovel_desc() %>
</a>
<%}%>


// chapter_desc.jsp page
<%
//接收chapter_list.jsp页面传输过来的ID
int novel_id = Integer.parseInt(request.getParameter("CheckNovelById"));
ChapterDao chapterDao = new ChapterDaoImpl();
//调用查询小说信息方法
Chapter chapter = chapterDao.checkChapterList(novel_id);
//调用查询小说章节信息方法
Chapter chapters = chapterDao.getChapters(novel_id);
%>

小说名字:<%=chapter.getNovel().getNovel_name() %>
小说作者:<%=chapter.getNovel().getNovel_author() %>
小说简介:<%=chapter.getNovel().getNovel_desc() %>
小说图片:<%=chapter.getNovel().getNovel_image()%>
小说章节:这里不会写了

之前列出信息,使用for循环,但是 chapters.iterator();这个里会报错
for(Iterator<Chapter> it = chapters.iterator();it.hasNext();){
       Chapter c = it.next();
        c.getTitle();
}
运行结果及报错内容

我想要达到的结果

从小说列表点击一本小说,跳转入详情页,详情页点击章节,跳转到章节页面

  • 写回答

1条回答 默认 最新

  • weixin_46263982 2022-03-01 09:29
    关注

    先多表 然后where不就好了

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月2日
  • 创建了问题 3月1日

悬赏问题

  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序