新闻管理系统【控制台版】
1. 数据库创建,创建新闻表news
1.1 表结构如下:
1.2 表创建的SQL语句
#使用逻辑库imooc
USE imooc;
#创建数据表news
/**
primary key表示主键 | auto_increment 表示自增 | COMMENT ''表示备注
NOT NULL 表示非空 | UNIQUE 表示唯一约束
**/
CREATE TABLE news (
id INT auto_increment primary key COMMENT '新闻ID' ,
title VARCHAR(20) NOT NULL UNIQUE COMMENT '新闻标题' ,
content VARCHAR(1000) NOT NULL COMMENT '新闻内容' ,
create_time date NOT NULL COMMENT '创建时间'
);
2.新建News实体类,符合javaBean规范
2.1 要求
1、 属性:新闻id,标题,内容,创建时间【属性名称同数据库表列名一致】; 2、 添加无参构造以及带参构造方法; 3、 get / set方法; 4、 toString()方法;
2.2 具体代码
package person.xsc.homework;
/**
* @Auther 徐士成
* @Date 2021-06-17 14:19
*/
public class News {
private int id;//新闻编号
private String title;//新闻标题
private String content;//新闻内容
private String date;//新闻发布时间
public News() {
}
public News(int id, String title, String content, String date) {
this.id = id;
this.title = title;
this.content = content;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
@Override
public String toString() {
return "新闻{" +
"编号=" + id +
", 标题='" + title + '\'' +
", 内容='" + content + '\'' +
", 发布时间='" + date + '\'' +
'}';
}
}
3. 使用Apache DBUtil+Druid完成对新闻的增删改查操作
3.1 创建属性文件druid-config.properties,置于src根目录
#驱动加载
driverClassName=com.mysql.cj.jdbc.Driver
#注册驱动
url=jdbc:mysql://localhost:3306/imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
#连接数据库的用户名
username=root
#连接数据库的密码
password=19980617zqqxsc
#初始化时池中建立的物理连接个数
initialSize=20
#最大的可活跃的连接池数量
maxActive=20
3.2 导入架包
File-->Project Structure-->Module-->+-->JARs or dirctories -->选择刚才创建的lib文件夹里面的架包,分别导入下面架包:
1. druid-1.1-21.jar
2. commons-dbutils-1.7.jar
3. mysql-connector-java-8.0.19.jar
3.3 创建方法类 NewsWays
package person.xsc.homework;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import javax.sql.DataSource;
import java.io.FileInputStream;
import java.net.URLDecoder;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Scanner;
/**
* @Auther 徐士成
* @Date 2021-06-17 14:44
*/
public class NewsWays {
List<News> listNews = new ArrayList<>();
static Connection conn = null;
static PreparedStatement pstmt = null;
static ResultSet rs = null;
static DataSource dataSource;
//1. 加载属性文件
static Properties properties = new Properties();
static String propertyFile = NewsWays.class.getResource("/druid-config.properties").getPath();
//空格->%20 | c:\java code\druid-config.properties
//c:\java%20code\druid-config.properties
static {
try {
propertyFile = new URLDecoder().decode(propertyFile, "UTF-8");
properties.load(new FileInputStream(propertyFile));
//2. 获取DataSource数据源对象
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
Scanner scanner=new Scanner(System.in);
/**
* 功能:添加新闻的方法
* 目标要求:输入新闻标题,新闻内容,以及新闻日期 向数据库中添加新闻
*/
public void insert(){
//创建数据库连接
System.out.println("请输入新闻标题:");
String title = scanner.next();
System.out.println("请输入新闻内容:");
String content = scanner.next();
System.out.println("请输入新闻日期:【按“年-月-日”的形式输入】");
String create_time=scanner.next();
java.text.SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date sdDate=null;
String sql="INSERT INTO news (title,content,create_time) VALUES(?,?,?)";
try {
conn = dataSource.getConnection();
conn.setAutoCommit(false);
QueryRunner runner = new QueryRunner();
try {
java.util.Date udDate=simpleDateFormat.parse(create_time);
long time=udDate.getTime();
sdDate=new Date(time);
} catch (ParseException e) {
System.out.println("输入的格式错误,请重新输入");
e.printStackTrace();
}
int result=runner.update(conn,sql,new Object[]{title,content,sdDate});
conn.commit();
if(result > 0){
System.out.println("添加成功!");
List<News> list=findAll();
for(News news:list){
System.out.println(news.toString());
}
}else{
System.out.println("添加失败!");
}
} catch (Exception e) {
e.printStackTrace();
rollBack(conn);
} finally {
closeConnection(conn);
}
}
/**
* 功能:查询新闻的方法
* 目标要求:查询所有的新闻
*/
public List<News> findAll(){
try {
QueryRunner runner = new QueryRunner(dataSource);
String sql="select * from news";
listNews=runner.query(sql, new BeanListHandler<>(News.class));
} catch (Exception e) {
e.printStackTrace();
}
return listNews;
}
public News findById(int select_id){
News news=null;
try {
QueryRunner runner = new QueryRunner(dataSource);
String sql="select * from news where id = ?";
news= (News)runner.query(sql, new BeanHandler<>(News.class),select_id);
} catch (Exception e) {
e.printStackTrace();
}
return news;
}
/**
* 功能:新闻更新的方法
* 目标要求:先查询所有的新闻列表,根据新闻列表中的id修改新闻标题,内容
*/
public void update(){
List<News> list=findAll();
for(News news:list){
System.out.println(news.toString());
}
System.out.println("请输入要修改的新闻ID:");
int id = scanner.nextInt();
System.out.println(findById(id).toString());
System.out.println("请输入要修改新闻标题:");
String title = scanner.next();
System.out.println("请输入要修改新闻内容:");
String content = scanner.next();
try {
conn = dataSource.getConnection();
conn.setAutoCommit(false);
QueryRunner runner = new QueryRunner();
String sql="UPDATE news SET title=?,content=? WHERE id=?";
int result=runner.update(conn,sql,new Object[]{title,content,id});
conn.commit();
if(result > 0){
System.out.println("修改成功!");
}else{
System.out.println("修改失败!");
}
} catch (Exception e) {
e.printStackTrace();
rollBack(conn);
} finally {
closeConnection(conn);
}
}
/**
* 功能:删除新闻的方法
* 要求目标:先查询所有的新闻列表,根据新闻列表中的id删除新闻
*/
public void detele(){
List<News> list=findAll();
for(News news:list){
System.out.println(news.toString());
}
System.out.println("请输入要删除的新闻ID:");
int id = scanner.nextInt();
try {
conn = dataSource.getConnection();
conn.setAutoCommit(false);
QueryRunner runner = new QueryRunner();
String sql="DELETE FROM news WHERE id=?";
int result=runner.update(conn,sql,new Object[]{id});
conn.commit();
if(result > 0){
System.out.println("删除成功!");
}else{
System.out.println("删除失败!");
}
} catch (Exception e) {
e.printStackTrace();
rollBack(conn);
} finally {
closeConnection(conn);
}
}
// 关闭数据库连接
public void closeConnection(Connection conn) {
try {
if(conn != null && !conn.isClosed()) {
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
//回滚
public void rollBack(Connection conn){
try {
if(conn != null && !conn.isClosed()) {
conn.rollback();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
public void showMenu(){
while(true){
System.out.println("欢迎来到新闻管理系统");
System.out.println("======================");
System.out.println("1 添加新闻");
System.out.println("2 查看新闻");
System.out.println("3 编辑新闻");
System.out.println("4 删除新闻");
System.out.println("5 退出系统");
System.out.println("请输入1-5的数字以进行相应操作:");
int num=0;
boolean f=true;
try {
num=scanner.nextInt();
}catch(java.util.InputMismatchException e) {
System.out.println("请输入的数据格式有误,不能有非数字字符!:");
scanner.next();
continue;
}
switch (num){
case 1:{
insert();
break;
}
case 2:{
System.out.println("新闻列表如下:");
List<News> list=findAll();
for(News news:list){
System.out.println(news.toString());
}
break;
}
case 3:{
update();
break;
}
case 4:{
detele();
break;
}
case 5:{
System.out.println("退出系统");
System.exit(0);
break;
}
default:{
System.out.println("未知操作,请输入1-5操作数");
break;
}
}
}
}
}
3.4 创建测试类TestNews
package person.xsc.homework;
/**
* @Auther 徐士成
* @Date 2021-06-17 23:40
*/
public class TestNews {
public static void main(String[] args) {
NewsWays newsWays = new NewsWays();
newsWays.showMenu();
}
}