问题遇到的现象和发生背景
想要建个小说网站,采集一些小说离线阅读
遇到问题,根据书本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;
项目 | 编号 | 小说名字 | 小说作者 | 小说简介 | 图片地址 |
---|---|---|---|---|---|
字段 | id | novel_name | novel_author | novel_desc | novel_image |
类型 | int | verchar(20) | verchar(20) | verchar(255) | verchar(255) |
项目 | 编号 | 章节名字 | 章节内容 | 书本编号 |
---|---|---|---|---|
字段 | id | title | chapter | novel_id |
类型 | int | varchar(20) | text | int |
相关代码:
// 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();
}
运行结果及报错内容
无
我想要达到的结果
从小说列表点击一本小说,跳转入详情页,详情页点击章节,跳转到章节页面