基于Apache DBUtil、Druid、MySQL与java.util.Scanner的 新闻管理系统【控制台版】

执键写春秋
• 阅读 1810

新闻管理系统【控制台版】

1. 数据库创建,创建新闻表news

1.1 表结构如下:

基于Apache DBUtil、Druid、MySQL与java.util.Scanner的 新闻管理系统【控制台版】

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();
    }
}
点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
4个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
1年前
030 SSM综合练习06
1.权限操作涉及的三张表(1)用户表信息描述users!(https://oscimg.oschina.net/oscnet/a4a2b1f943cbc2db1c8ddd613e7ed00a9ae.png)sql语句:CREATETABLEusers(idVARCHAR2(32)DEFAU
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Wesley13 Wesley13
1年前
Oracle一张表中实现对一个字段不同值和总值的统计(多个count)
需求:统计WAIT\_ORDER表中的工单总数、未处理工单总数、已完成工单总数、未完成工单总数。表结构:为了举例子方便,WAIT\_ORDER表只有两个字段,分别是ID、STATUS,其中STATUS为工单的状态。1表示未处理,2表示已完成,3表示未完成总数。 SQL:  1.SELECT   2
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
7个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
京东云开发者 京东云开发者
2个月前
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究