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

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

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

1.1 表结构如下:

图片1

1.2 表创建的SQL语句

1#使用逻辑库imooc 2USE imooc; 3#创建数据表news 4/** 5primary key表示主键 | auto_increment 表示自增 | COMMENT ''表示备注 6NOT NULL 表示非空 | UNIQUE 表示唯一约束 7**/ 8CREATE TABLE news ( 9 id INT auto_increment primary key COMMENT '新闻ID' , 10 title VARCHAR(20) NOT NULL UNIQUE COMMENT '新闻标题' , 11 content VARCHAR(1000) NOT NULL COMMENT '新闻内容' , 12 create_time date NOT NULL COMMENT '创建时间' 13);

2.新建News实体类,符合javaBean规范

2.1 要求

1、 属性:新闻id,标题,内容,创建时间【属性名称同数据库表列名一致】; 2、 添加无参构造以及带参构造方法; 3、 get / set方法; 4、 toString()方法;

2.2 具体代码

1package person.xsc.homework; 2/** 3 * @Auther 徐士成 4 * @Date 2021-06-17 14:19 5 */ 6public class News { 7 private int id;//新闻编号 8 private String title;//新闻标题 9 private String content;//新闻内容 10 private String date;//新闻发布时间 11 12 public News() { 13 14 } 15 16 public News(int id, String title, String content, String date) { 17 this.id = id; 18 this.title = title; 19 this.content = content; 20 this.date = date; 21 } 22 23 public int getId() { 24 return id; 25 } 26 27 public void setId(int id) { 28 this.id = id; 29 } 30 31 public String getTitle() { 32 return title; 33 } 34 35 public void setTitle(String title) { 36 this.title = title; 37 } 38 39 public String getContent() { 40 return content; 41 } 42 43 public void setContent(String content) { 44 this.content = content; 45 } 46 47 public String getDate() { 48 return date; 49 } 50 51 public void setDate(String date) { 52 this.date = date; 53 } 54 55 @Override 56 public String toString() { 57 return "新闻{" + 58 "编号=" + id + 59 ", 标题='" + title + '\'' + 60 ", 内容='" + content + '\'' + 61 ", 发布时间='" + date + '\'' + 62 '}'; 63 } 64}

3. 使用Apache DBUtil+Druid完成对新闻的增删改查操作

3.1 创建属性文件druid-config.properties,置于src根目录

1#驱动加载 2driverClassName=com.mysql.cj.jdbc.Driver 3#注册驱动 4url=jdbc:mysql://localhost:3306/imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai 5#连接数据库的用户名 6username=root 7#连接数据库的密码 8password=19980617zqqxsc 9#初始化时池中建立的物理连接个数 10initialSize=20 11#最大的可活跃的连接池数量 12maxActive=20

3.2 导入架包

1File-->Project Structure-->Module-->+-->JARs or dirctories -->选择刚才创建的lib文件夹里面的架包,分别导入下面架包: 21. druid-1.1-21.jar 32. commons-dbutils-1.7.jar 43. mysql-connector-java-8.0.19.jar

3.3 创建方法类 NewsWays

1package person.xsc.homework; 2 3import com.alibaba.druid.pool.DruidDataSourceFactory; 4import org.apache.commons.dbutils.QueryRunner; 5import org.apache.commons.dbutils.handlers.BeanHandler; 6import org.apache.commons.dbutils.handlers.BeanListHandler; 7 8import javax.sql.DataSource; 9import java.io.FileInputStream; 10import java.net.URLDecoder; 11import java.sql.*; 12import java.text.ParseException; 13import java.text.SimpleDateFormat; 14import java.util.ArrayList; 15import java.util.List; 16import java.util.Properties; 17import java.util.Scanner; 18 19/** 20 * @Auther 徐士成 21 * @Date 2021-06-17 14:44 22 */ 23public class NewsWays { 24 List<News> listNews = new ArrayList<>(); 25 static Connection conn = null; 26 static PreparedStatement pstmt = null; 27 static ResultSet rs = null; 28 static DataSource dataSource; 29 //1. 加载属性文件 30 static Properties properties = new Properties(); 31 static String propertyFile = NewsWays.class.getResource("/druid-config.properties").getPath(); 32 //空格->%20 | c:\java code\druid-config.properties 33 //c:\java%20code\druid-config.properties 34 static { 35 try { 36 propertyFile = new URLDecoder().decode(propertyFile, "UTF-8"); 37 properties.load(new FileInputStream(propertyFile)); 38 //2. 获取DataSource数据源对象 39 dataSource = DruidDataSourceFactory.createDataSource(properties); 40 } catch (Exception e) { 41 e.printStackTrace(); 42 } 43 } 44 Scanner scanner=new Scanner(System.in); 45 /** 46 * 功能:添加新闻的方法 47 * 目标要求:输入新闻标题,新闻内容,以及新闻日期 向数据库中添加新闻 48 */ 49 public void insert(){ 50 //创建数据库连接 51 System.out.println("请输入新闻标题:"); 52 String title = scanner.next(); 53 System.out.println("请输入新闻内容:"); 54 String content = scanner.next(); 55 System.out.println("请输入新闻日期:【按“年-月-日”的形式输入】"); 56 String create_time=scanner.next(); 57 java.text.SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); 58 java.sql.Date sdDate=null; 59 String sql="INSERT INTO news (title,content,create_time) VALUES(?,?,?)"; 60 try { 61 conn = dataSource.getConnection(); 62 conn.setAutoCommit(false); 63 QueryRunner runner = new QueryRunner(); 64 try { 65 java.util.Date udDate=simpleDateFormat.parse(create_time); 66 long time=udDate.getTime(); 67 sdDate=new Date(time); 68 } catch (ParseException e) { 69 System.out.println("输入的格式错误,请重新输入"); 70 e.printStackTrace(); 71 } 72 int result=runner.update(conn,sql,new Object[]{title,content,sdDate}); 73 conn.commit(); 74 if(result > 0){ 75 System.out.println("添加成功!"); 76 List<News> list=findAll(); 77 for(News news:list){ 78 System.out.println(news.toString()); 79 } 80 }else{ 81 System.out.println("添加失败!"); 82 } 83 } catch (Exception e) { 84 e.printStackTrace(); 85 rollBack(conn); 86 } finally { 87 closeConnection(conn); 88 } 89 } 90 91 /** 92 * 功能:查询新闻的方法 93 * 目标要求:查询所有的新闻 94 */ 95 public List<News> findAll(){ 96 try { 97 QueryRunner runner = new QueryRunner(dataSource); 98 String sql="select * from news"; 99 listNews=runner.query(sql, new BeanListHandler<>(News.class)); 100 } catch (Exception e) { 101 e.printStackTrace(); 102 } 103 return listNews; 104 } 105 106 public News findById(int select_id){ 107 News news=null; 108 try { 109 QueryRunner runner = new QueryRunner(dataSource); 110 String sql="select * from news where id = ?"; 111 news= (News)runner.query(sql, new BeanHandler<>(News.class),select_id); 112 } catch (Exception e) { 113 e.printStackTrace(); 114 } 115 return news; 116 } 117 118 /** 119 * 功能:新闻更新的方法 120 * 目标要求:先查询所有的新闻列表,根据新闻列表中的id修改新闻标题,内容 121 */ 122 public void update(){ 123 List<News> list=findAll(); 124 for(News news:list){ 125 System.out.println(news.toString()); 126 } 127 System.out.println("请输入要修改的新闻ID:"); 128 int id = scanner.nextInt(); 129 System.out.println(findById(id).toString()); 130 System.out.println("请输入要修改新闻标题:"); 131 String title = scanner.next(); 132 System.out.println("请输入要修改新闻内容:"); 133 String content = scanner.next(); 134 135 try { 136 conn = dataSource.getConnection(); 137 conn.setAutoCommit(false); 138 QueryRunner runner = new QueryRunner(); 139 String sql="UPDATE news SET title=?,content=? WHERE id=?"; 140 int result=runner.update(conn,sql,new Object[]{title,content,id}); 141 conn.commit(); 142 if(result > 0){ 143 System.out.println("修改成功!"); 144 }else{ 145 System.out.println("修改失败!"); 146 } 147 } catch (Exception e) { 148 e.printStackTrace(); 149 rollBack(conn); 150 } finally { 151 closeConnection(conn); 152 } 153 } 154 155 /** 156 * 功能:删除新闻的方法 157 * 要求目标:先查询所有的新闻列表,根据新闻列表中的id删除新闻 158 */ 159 public void detele(){ 160 List<News> list=findAll(); 161 for(News news:list){ 162 System.out.println(news.toString()); 163 } 164 System.out.println("请输入要删除的新闻ID:"); 165 int id = scanner.nextInt(); 166 try { 167 conn = dataSource.getConnection(); 168 conn.setAutoCommit(false); 169 QueryRunner runner = new QueryRunner(); 170 String sql="DELETE FROM news WHERE id=?"; 171 int result=runner.update(conn,sql,new Object[]{id}); 172 conn.commit(); 173 if(result > 0){ 174 System.out.println("删除成功!"); 175 }else{ 176 System.out.println("删除失败!"); 177 } 178 } catch (Exception e) { 179 e.printStackTrace(); 180 rollBack(conn); 181 } finally { 182 closeConnection(conn); 183 } 184 } 185 // 关闭数据库连接 186 public void closeConnection(Connection conn) { 187 try { 188 if(conn != null && !conn.isClosed()) { 189 conn.close(); 190 } 191 } catch (SQLException throwables) { 192 throwables.printStackTrace(); 193 } 194 } 195 //回滚 196 public void rollBack(Connection conn){ 197 try { 198 if(conn != null && !conn.isClosed()) { 199 conn.rollback(); 200 } 201 } catch (SQLException e1) { 202 e1.printStackTrace(); 203 } 204 } 205 public void showMenu(){ 206 while(true){ 207 System.out.println("欢迎来到新闻管理系统"); 208 System.out.println("======================"); 209 System.out.println("1 添加新闻"); 210 System.out.println("2 查看新闻"); 211 System.out.println("3 编辑新闻"); 212 System.out.println("4 删除新闻"); 213 System.out.println("5 退出系统"); 214 System.out.println("请输入1-5的数字以进行相应操作:"); 215 int num=0; 216 boolean f=true; 217 try { 218 num=scanner.nextInt(); 219 }catch(java.util.InputMismatchException e) { 220 System.out.println("请输入的数据格式有误,不能有非数字字符!:"); 221 scanner.next(); 222 continue; 223 } 224 switch (num){ 225 case 1:{ 226 insert(); 227 break; 228 } 229 case 2:{ 230 System.out.println("新闻列表如下:"); 231 List<News> list=findAll(); 232 for(News news:list){ 233 System.out.println(news.toString()); 234 } 235 break; 236 } 237 case 3:{ 238 update(); 239 break; 240 } 241 case 4:{ 242 detele(); 243 break; 244 } 245 case 5:{ 246 System.out.println("退出系统"); 247 System.exit(0); 248 break; 249 } 250 default:{ 251 System.out.println("未知操作,请输入1-5操作数"); 252 break; 253 } 254 } 255 } 256 257 } 258}

3.4 创建测试类TestNews

1package person.xsc.homework; 2/** 3 * @Auther 徐士成 4 * @Date 2021-06-17 23:40 5 */ 6public class TestNews { 7 public static void main(String[] args) { 8 NewsWays newsWays = new NewsWays(); 9 newsWays.showMenu(); 10 } 11}
点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

Java获得今日零时零分零秒的时间(Date型)

publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS