本章主要是查询方法和修改方法
- 编写查询方法,查询所有项目审核信息并返回查询结果,需实现分页功能,注意必要的异常处理。
- 编写查询方法,根据项目编号查询指定项目的审核信息,注意必要的异常处理。
- 编写修改方法,修改指定项目的审核状态信息,注意必要的异常处理。
Mysql数据库
-
project ----表内容
-
project ----设计表
-
entry 包 --- Projectinfo类
属性----必须与数据库里面,我们所调用的表一一对应!!!!
package projectinfo.entry;public class Projectinfo {/*** 项目编号* 项目名称* 项目开始日期* 项目结束日期* 项目申报状态 0--已申报; 1--审核中; 2--已审核*/private Integer pId;private String pName;private String startDate;private String endDate;private Integer status;public Projectinfo() {}public Projectinfo(Integer pId, String pName, String startDate, String endDate, Integer status) {this.pId = pId;this.pName = pName;this.startDate = startDate;this.endDate = endDate;this.status = status;}public Integer getpId() {return pId;}public void setpId(Integer pId) {this.pId = pId;}public String getpName() {return pName;}public void setpName(String pName) {this.pName = pName;}public String getStartDate() {return startDate;}public void setStartDate(String startDate) {this.startDate = startDate;}public String getEndDate() {return endDate;}public void setEndDate(String endDate) {this.endDate = endDate;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}@Overridepublic String toString() {return "Projectinfo{" +"pId=" + pId +", pName='" + pName + '\'' +", startDate='" + startDate + '\'' +", endDate='" + endDate + '\'' +", status=" + status +'}';}
}
-
util 包 --- DBhelper类
主要是提取出来的通用方法。
加载数据库驱动类,获得连接对象
关闭资源
增删改
查询
package projectinfo.util;import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;public class DBHelper {//提取1+2,获得连接对象public Connection getcon() {Connection con = null;try {Class.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql://127.0.0.1:3306/project?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";//localhost也可以写成-----127.0.0.1String username = "root";String password = "root";//密码con = DriverManager.getConnection(url, username, password);} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}return con;}//关闭连接资源(提取第7步)public void closeAll(Connection con, PreparedStatement ps, ResultSet rs) {try {if (con != null) {con.close();}if (ps != null) {ps.close();}if (rs != null) {rs.close();}} catch (SQLException e) {e.printStackTrace();}}//通用的增删改方法:1-7在这里做汇总public int update(String sql, Object... arrs) {//4-5改Connection con = getcon();//1-2PreparedStatement ps = null;int count = 0;try {ps = con.prepareStatement(sql);//4 public int update(String sql,Object...arrs){for (int i = 0; i < arrs.length; i++) {//判断有几个问ps.setObject((i + 1), arrs[i]);//给第几个?赋值}count = ps.executeUpdate();//5} catch (SQLException e) {e.printStackTrace();}closeAll(con, ps, null);//7return count;}//通用的查询方法方法----查询所有表!!!public List query(String sql, Class cla, Object... arrs) {List list = new ArrayList<>();Connection con = getcon();//1-2 获得连接对象PreparedStatement ps = null;ResultSet rs = null;try {ps = con.prepareStatement(sql);//4.获得执行对象for (int i = 0; i < arrs.length; i++) {ps.setObject((i + 1), arrs[i]);}rs = ps.executeQuery();//5.//将rs里的数据存到list集合里去 ---反射while (rs.next()) {Object obj = cla.newInstance(); //实例化对象Field[] fs = cla.getDeclaredFields();//获得属性for (Field f : fs) {//赋值f.setAccessible(true);//允许暴力访问f.set(obj, rs.getObject(f.getName()));}list.add(obj);}} catch (SQLException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} finally {closeAll(con, ps, rs);}return list;}}
-
dao 包 --- ProjectinfoDao接口
package projectinfo.dao;import projectinfo.entry.Projectinfo;import java.util.List;public interface ProjectinfoDao {/*** 查询方法* 查询所有项目审核信息并返回审核结果** @return*/List<Projectinfo> selectAll();/*** 查询方法* 根据项目编号查询指定项目的审核信息,注意必要的异常处理** @param pId* @return*/Projectinfo selectByPId(Integer pId);/*** 修改方法* 修改指定项目的审核状态信息,注意必要的异常处理** @param projectinfo* @return*/int updateStatus(Projectinfo projectinfo);}
-
dao包 --- impl 包 --- ProjectinfoDaoImpl类
package projectinfo.dao.impl;import projectinfo.dao.ProjectinfoDao;
import projectinfo.entry.Projectinfo;
import projectinfo.util.DBHelper;import java.util.List;public class ProjectinfoDaoImpl implements ProjectinfoDao {private DBHelper db = new DBHelper();/*** 查询方法* 查询所有项目审核信息并返回审核结果** @return*/@Overridepublic List<Projectinfo> selectAll() {String sql = "select * from projectinfo";return db.query(sql, Projectinfo.class);}/*** 查询方法* 根据项目编号查询指定项目的审核信息,注意必要的异常处理** @param pId* @return*/@Overridepublic Projectinfo selectByPId(Integer pId) {String sql = "select * from projectinfo where pId=?";List<Projectinfo> list = db.query(sql, Projectinfo.class, pId);return list.size() > 0 ? list.get(0) : new Projectinfo();}/*** 修改方法* 修改指定项目的审核状态信息,注意必要的异常处理** @param projectinfo* @return*/@Overridepublic int updateStatus(Projectinfo projectinfo) {String sql = "update projectinfo set status=? where pId=?";Object[] obj = {projectinfo.getStatus(), projectinfo.getpId()};return db.update(sql, obj);}
}
-
service 包 --- ProjectinfoService接口
package projectinfo.service;import projectinfo.entry.Projectinfo;import java.util.List;public interface ProjectinfoService {/*** 查询方法* 查询所有项目审核信息并返回审核结果** @return*/List<Projectinfo> findAll();/*** 查询方法* 根据项目编号查询指定项目的审核信息,注意必要的异常处理** @param pId* @return*/Projectinfo findByPId(Integer pId);/*** 修改方法* 修改指定项目的审核状态信息,注意必要的异常处理** @param projectinfo* @return*/boolean modifyStatus(Projectinfo projectinfo);}
-
service 包 --- impl 包 --- ProjectinfoServiceImpl类
package projectinfo.service.impl;import projectinfo.dao.ProjectinfoDao;
import projectinfo.dao.impl.ProjectinfoDaoImpl;
import projectinfo.entry.Projectinfo;
import projectinfo.service.ProjectinfoService;import java.util.List;public class ProjectinfoServiceImpl implements ProjectinfoService {private ProjectinfoDao proDao = new ProjectinfoDaoImpl();/*** 查询方法* 查询所有项目审核信息并返回审核结果** @return*/@Overridepublic List<Projectinfo> findAll() {return proDao.selectAll();}/*** 查询方法* 根据项目编号查询指定项目的审核信息,注意必要的异常处理** @param pId* @return*/@Overridepublic Projectinfo findByPId(Integer pId) {return proDao.selectByPId(pId);}/*** 修改方法* 修改指定项目的审核状态信息,注意必要的异常处理** @param projectinfo* @return*/@Overridepublic boolean modifyStatus(Projectinfo projectinfo) {return proDao.updateStatus(projectinfo) >= 0;}
}
-
controller 包 --- ProjectinfoCotroller类
package projectinfo.cotroller;import com.sun.xml.internal.ws.api.ha.StickyFeature;
import projectinfo.entry.Projectinfo;
import projectinfo.service.ProjectinfoService;
import projectinfo.service.impl.ProjectinfoServiceImpl;import java.util.List;
import java.util.Scanner;public class ProjectinfoCotroller {private ProjectinfoService proService = new ProjectinfoServiceImpl();private Scanner input = new Scanner(System.in);/*** 主菜单*/public void mainMenu() {System.out.println("********************************************************************************");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("********************************************************************************");System.out.println("请选择:");int index = input.nextInt();switch (index) {case 1:System.out.println("<----全部项目---->");methodSelectAll();break;case 2:System.out.println("<----搜索项目---->");methodSelectByPId();break;case 3:System.out.println("<----修改项目状态---->");methodUpdate();break;case 4:System.out.println("谢谢使用!");System.exit(0);}/* System.out.println("********************************************************************************");System.out.println("输入0返回:");int num = input.nextInt();if (num == 0) {mainMenu();}*/}/*** 查询方法* 查询所有项目审核信息*/public void methodSelectAll() {try {List<Projectinfo> list = proService.findAll();System.out.println("********************************************************************************");System.out.println("项目编号 \t\t\t项目名称 \t\t\t项目开始日期 \t\t\t项目结束日期 \t\t\t项目申报状态");if (list.isEmpty()) {System.out.println("没有项目数据");} else {for (Projectinfo p : list) {String status = getStatys(p.getStatus());System.out.println(p.getpId() + "\t\t" +p.getpName() + "\t\t" +p.getStartDate() + "\t\t" +p.getEndDate() + "\t\t" +status);}}} catch (Exception e) {throw new RuntimeException(e);}System.out.println("********************************************************************************");System.out.println("1---搜索项目");System.out.println("2---修改项目状态");System.out.println("3---退出");System.out.println("请选择:");int index = input.nextInt();switch (index) {case 1:System.out.println("<----搜索项目---->");methodSelectByPId();break;case 2:System.out.println("<----修改项目状态---->");methodUpdate();break;case 3:System.out.println("谢谢使用!");System.exit(0);}}/*** status判断 0--已申报 1--审核中 2--已审核*/public String getStatys(int status) {switch (status) {case 0:return "已申报";case 1:return "审核中";case 2:return "已审核";default:return "未知状态";}}/*** 查询方法* 根据项目编号查询指定项目的审核信息,注意必要的异常处理*/public void methodSelectByPId() {System.out.println("********************************************************************************");System.out.println("请输入要查询的项目的编号(pId):");try {int pId = input.nextInt();Projectinfo p = proService.findByPId(pId);if (p != null) {System.out.println("项目编号 \t\t\t项目名称 \t\t\t项目开始日期 \t\t\t项目结束日期 \t\t\t项目申报状态");String status = getStatys(p.getStatus());System.out.println(p.getpId() + "\t\t" +p.getpName() + "\t\t" +p.getStartDate() + "\t\t" +p.getEndDate() + "\t\t" +status);}} catch (Exception e) {throw new RuntimeException(e);}System.out.println("********************************************************************************");System.out.println("1---全部项目");System.out.println("2---修改项目状态");System.out.println("3---退出");System.out.println("********************************************************************************");System.out.println("请选择:");int index = input.nextInt();switch (index) {case 1:System.out.println("<----全部项目---->");methodSelectAll();break;case 2:System.out.println("<----修改项目状态---->");methodUpdate();break;case 3:System.out.println("谢谢使用!");System.exit(0);}}/*** 修改方法* 修改指定项目的审核状态信息*/public void methodUpdate() {System.out.println("********************************************************************************");System.out.println("请输入要修改申报状态的项目编号:");int pId = input.nextInt();Projectinfo p = proService.findByPId(pId);if (p != null) {String status = getStatys(p.getStatus());System.out.println("当前项目的项目申报状态为" + "\t\t" + status);boolean b = proService.modifyStatus(p);System.out.println("请输入修改后该项目的申报状态(已申报//已审核//审核中):");String statusStr = input.next();int status1 = getStatus1(statusStr);if (status1 != -1) {if (status1 == p.getStatus()) {System.out.println("申报状态与原来一一致,不需要更改!即将回到主页面");System.out.println("================================================================================");mainMenu();} else {p.setStatus(status1);proService.modifyStatus(p);System.out.println("该项目申报状态已成功修改为" + "\t\t" + statusStr);System.out.println("即将回到主页面");System.out.println("================================================================================");mainMenu();}} else {System.out.println("输入错误,请重新操作");System.out.println("即将回到主页面");System.out.println("================================================================================");mainMenu();}}}/*** status1判断 0--已申报 1--审核中 2--已审核*/public int getStatus1(String status1) {switch (status1) {case "已申报":return 0;case "审核中":return 1;case "已审核":return 2;default:return -1;}}}
-
test 包 --- ProMain类
package projectinfo.test;import projectinfo.cotroller.ProjectinfoCotroller;public class ProMain {public static void main(String[] args) {ProjectinfoCotroller projectinfoCotroller = new ProjectinfoCotroller();projectinfoCotroller.mainMenu();}
}
结果展示