第11关:博客系统之查询博客评论
任务描述
本关任务:在上一关中,我们查询了自己发布的评论,本关要求实现查询博客的所有评论的功能。
相关数据说明
MySQL 数据库 mydb;
博客评论表 t_comment;
列名 类型 非空 注释
commentId int √ 评论 ID 主键 自增
commentContent varchar √ 博客标题
blogId varchar √ 博客 ID
createTime varchar √ 评论时间
userId varchar √ 评论人 ID,也就是用户 ID
MySQL 连接配置:
Driver:com.mysql.jdbc.Driver;
URL:jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8;
user:root;
password:123123。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现查询博客的评论的功能,具体要求如下:
用户查询完博客后,可以进行发布评论和查询评论,在之前的关卡中,当用户输入 1 后会进入发布评论,这里我们需要实现当用户输入 2 后可以查看该博客的所有评论;
当用户进入查看评论模块后,首先,我们判断博客 ID 是否为 0,如果为 0,输出:“请输入你要查看评论的博客ID”,获取键盘输入的博客 ID,如果不为 0,则使用该博客 ID,调用 CommentDao 的 findCommentById(int BlogId),根据博客 ID 查询这个博客的所有评论;
在该方法中,依次输出:“博客的评论如下:”、“blogId blogTitle blogContent commentContent userName”,并按照上述格式输出查询的评论;
修改之前的发布评论方法,当用户发布完评论后,输出:“评论发布成功!”后,进入用户查询该博客所有评论的模块。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
可在右侧“测试结果”区查看具体的测试集详情。
测试输入:
1
sunfeng
123456789
2
3
2
2
5
3
预期输出:
**********欢迎进入博客系统**********
**********1. 登录**********
**********2. 注册**********
**********3. 退出系统**********
请输入你要进行的操作:
请输入你的用户名
请输入你的密码
1. 创建博客
2. 查看博客
3. 删除博客
4. 修改博客
5. 返回上一级菜单
6. 查询自己的评论
请输入你要进行的操作:
查询所有博客请按1,查询自己的博客请按2,查询指定博客请按3,返回请按其它键
请输入你要查询的博客ID
blogId blogTitle blogContent typeName userName
2 Java简介 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。 Java sunfeng
发布评论请按1,查询所有评论请按2,请按其它键
博客的评论如下:
blogId blogTitle blogContent commentContent userName
2 Java简介 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。 Java好难啊 sunfeng
2 Java简介 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。 Java啊啊啊 yechen
1. 创建博客
2. 查看博客
3. 删除博客
4. 修改博客
5. 返回上一级菜单
6. 查询自己的评论
请输入你要进行的操作:
**********欢迎进入博客系统**********
**********1. 登录**********
**********2. 注册**********
**********3. 退出系统**********
请输入你要进行的操作:
退出系统!
step11/com/menu/Menu.java
package com.menu;
import com.dao.BlogDao;
import com.dao.BlogTypeDao;
import com.dao.CommentDao;
import com.dao.UserDao;
import com.pojo.Blog;
import com.pojo.BlogType;
import com.pojo.Comment;
import com.pojo.User;
import java.util.Date;
import java.util.Scanner;
public class Menu {
public static void main(String[] args) {
UserDao userDao = new UserDao();
boolean flag = true;
User user;
Blog blog;
Comment comment;
BlogType blogType;
BlogDao blogDao = new BlogDao();
CommentDao commentDao = new CommentDao();
BlogTypeDao blogTypeDao = new BlogTypeDao();
Scanner sc = new Scanner(System.in);
do {
System.out.println("**********欢迎进入博客系统**********");
System.out.println("**********1. 登录**********");
System.out.println("**********2. 注册**********");
System.out.println("**********3. 退出系统**********");
System.out.println("请输入你要进行的操作:");
int x = sc.nextInt();
String userName;
String passWord;
String phone;
switch (x) {
case 1:
// 获取键盘输入的用户信息
System.out.println("请输入你的用户名");
userName = sc.next();
System.out.println("请输入你的密码");
passWord = sc.next();
user = userDao.login(userName,passWord);
if (user != null) {
boolean flag1 = true;
do{
System.out.println("1. 创建博客");
System.out.println("2. 查看博客");
System.out.println("3. 删除博客");
System.out.println("4. 修改博客");
System.out.println("5. 返回上一级菜单");
System.out.println("6. 查询自己的评论");
System.out.println("请输入你要进行的操作:");
int y = sc.nextInt();
int blogId = 0;
String blogTitle;
String blogContent;
String typeName;
switch (y){
case 1:
// 获取键盘输入的用户信息
System.out.println("请输入你要创建的博客标题");
blogTitle = sc.next();
System.out.println("请输入你要创建的博客内容");
blogContent = sc.next();
System.out.println("请输入你的博客类型");
typeName = sc.next();
// 查询博客类型是否存在
blogType = blogTypeDao.findBlogType(typeName);
if (blogType != null){
// 将博客信息放入博客对象中
blog = new Blog();
blog.setBlogTitle(blogTitle);
blog.setBlogContent(blogContent);
blog.setUser(user);
blog.setBlogType(blogType);
// 验证博客是否创建成功
boolean b = blogDao.addBlog(blog);
if (b){
System.out.println("博客创建成功!");
}else{
System.out.println("博客创建失败!");
}
}else {
System.out.println("博客类型不存在!");
}
break;
case 2:
System.out.println("查询所有博客请按1,查询自己的博客请按2,查询指定博客请按3,返回请按其它键");
String find = sc.next();
// 查询所有的博客
if ("1".equals(find)){
blogDao.findAllBlogs();
// 查询自己的博客
}else if ("2".equals(find)){
blogDao.findMyBlogs(user);
}else if ("3".equals(find)){
// 获取键盘输入的博客 ID
System.out.println("请输入你要查询的博客ID");
blogId = sc.nextInt();
// 查询博客
blogDao.findBlogById(blogId);
}else if ("4".equals(find)){
// 获取键盘输入的博客标题
System.out.println("请输入你要查询的博客标题");
blogTitle = sc.next();
// 查询博客
blogDao.findBlogByTitle(blogTitle);
}else {
break;
}
// 获取用户是否想要发布评论
System.out.println("发布评论请按1,查询所有评论请按2,请按其它键");
String c = sc.next();
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
if ("1".equals(c)){
// 获取用户评论的博客
if (blogId == 0){
System.out.println("请输入你要评论的博客ID");
blogId = sc.nextInt();
}
// 查询博客是否存在
if (blogDao.checkBlogById(blogId)){
// 获取用户评论的内容
System.out.println("请输入你要评论的内容");
String commentContent = sc.next();
Date date = new Date();
blog = new Blog();
blog.setBlogId(blogId);
comment = new Comment();
comment.setCommentContent(commentContent);
comment.setBlog(blog);
comment.setUser(user);
comment.setDate(date);
// 将评论内容添加
commentDao.addComment(comment);
// 评论添加成功后进入查询该博客所有评论模块
c = "2";
}else {
System.out.println("博客不存在");
}
}
if ("2".equals(c)){
// 判读博客 ID 是否为 0
if (blogId == 0){
System.out.println("请输入你要查看评论的博客ID");
blogId = sc.nextInt();
}
// 查询该博客所有评论
commentDao.findCommentById(blogId);
/********** End **********/
}
break;
case 3:
System.out.println("请输入你要删除的博客ID");
blogId = sc.nextInt();
// 删除博客
blogDao.deleteBlog(blogId, user);
break;
case 4:
// 获取用户键盘输入信息
System.out.println("请输入你要修改的博客ID");
blogId = sc.nextInt();
System.out.println("请输入修改后的博客标题");
blogTitle = sc.next();
System.out.println("请输入修改后的博客内容");
blogContent = sc.next();
System.out.println("请输入修改后的博客类型");
typeName = sc.next();
// 查询博客类型是否存在
blogType = blogTypeDao.findBlogType(typeName);
if (blogType != null){
// 将博客信息存入博客对象中
blog = new Blog();
blog.setBlogId(blogId);
blog.setBlogTitle(blogTitle);
blog.setBlogContent(blogContent);
blog.setUser(user);
blog.setBlogType(blogType);
// 修改博客
blogDao.updateBlog(blog);
}else {
System.out.println("博客类型不存在!");
}
break;
case 5:
flag1 = false;
break;
case 6:
// 调用 findMyComments 方法查询自己发布的评论
commentDao.findMyComments(user);
break;
default:
System.out.println("你的输入有误,请重新输入!");
break;
}
}while (flag1);
}else{
System.out.println("用户名或密码不正确!");
}
break;
case 2:
user = new User();
// 获取键盘输入的用户信息
System.out.println("请输入你要注册的用户名");
userName = sc.next();
System.out.println("请输入你要注册的密码");
passWord = sc.next();
System.out.println("请输入你要注册的手机号");
phone = sc.next();
// 将用户信息存入用户对象中
user.setUserName(userName);
user.setPassWord(passWord);
user.setPhone(phone);
// 调用 register 方法,将用户信息传入其中,判断注册是否成功
boolean result = userDao.register(user);
if (result) {
System.out.println("注册成功!");
}else{
System.out.println("注册失败!");
}
break;
case 3:
// 设置状态为 false,退出系统
flag = false;
System.out.println("退出系统!");
break;
default:
System.out.println("你的输入有误,请重新输入!");
break;
}
} while (flag);
}
}
step11/com/dao/CommentDao.java
package com.dao;
import com.pojo.Comment;
import com.pojo.User;
import com.util.DBConnection;
import java.sql.*;
public class CommentDao {
static Connection conn = null; // 连接对象
static PreparedStatement ps = null; // 预编译
static ResultSet rs = null; // 结果集
/**
* 功能 添加评论
* 参数 comment
*/
public void addComment(Comment comment) {
try {
conn = DBConnection.getConnection();
String sql = "insert into t_comment (commentContent,blogId,createTime,userId) values (?,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, comment.getCommentContent());
ps.setInt(2, comment.getBlog().getBlogId());
ps.setTimestamp(3, new Timestamp(comment.getDate().getTime()));
ps.setInt(4, comment.getUser().getUserId());
int i = ps.executeUpdate();
// 判断是否添加成功
if (i == 1) {
System.out.println("评论发布成功!");
}else {
System.out.println("评论发布失败!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 功能 查询自己发步的评论
* @param user
*/
public void findMyComments(User user) {
// 通过三表关联查询,查询自己发步的评论
try {
conn = DBConnection.getConnection();
String sql = "select t_blog.blogId blogId,t_blog.blogTitle blogTitle,t_blog.blogContent blogContent,comment.commentContent from (select * from t_comment where userId = ?)comment left join t_blog on comment.blogId = t_blog.blogId";
ps = conn.prepareStatement(sql);
ps.setInt(1,user.getUserId());
rs = ps.executeQuery();
// 输出查询结果
System.out.println("我发布的评论如下:");
System.out.println("blogId\tblogTitle\tblogContent\tcommentContent");
while (rs.next()){
int blogId = rs.getInt("blogId");
String blogTitle = rs.getString("blogTitle");
String blogContent = rs.getString("blogContent");
String commentContent = rs.getString("commentContent");
System.out.println(blogId+"\t"+blogTitle+"\t"+blogContent+"\t"+commentContent);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
/**
* 功能 查询博客的所有评论
* 参数 blogId
*/
public void findCommentById(int blogId) {
// 根据 ID 查询博客的所有评论
try {
conn = DBConnection.getConnection();
String sql = "select t.blogId blogId,t.blogTitle blogTitle,t.blogContent blogContent,t.commentContent,t_user.userName from (select t_blog.blogId blogId,t_blog.blogTitle blogTitle,t_blog.blogContent blogContent,comment.commentContent,comment.userId userId from (select * from t_comment where blogId = ?)comment left join t_blog on comment.blogId = t_blog.blogId)t left join t_user on t.userId = t_user.userId\n";
ps = conn.prepareStatement(sql);
ps.setInt(1,blogId);
rs = ps.executeQuery();
// 输出查询结果
System.out.println("博客的评论如下:");
System.out.println("blogId\tblogTitle\tblogContent\tcommentContent\tuserName");
while (rs.next()){
String blogTitle = rs.getString("blogTitle");
String blogContent = rs.getString("blogContent");
String commentContent = rs.getString("commentContent");
String userName = rs.getString("userName");
System.out.println(blogId+"\t"+blogTitle+"\t"+blogContent+"\t"+commentContent+"\t"+userName);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/********** End **********/
}