首页 > 代码库 > 初学Java8:通过JDBC实现简易人力资源管理系统
初学Java8:通过JDBC实现简易人力资源管理系统
1,人力资源管理系统,实现查询、添加、修改、删除的功能。同时设计登录界面,实现注册、登录,修改密码的功能。通过登录进入人力资源管理系统。
2,能实现将输入的数据保存到数据库,并实现对数据的查询,修改,删除。
3,在数据库设计两张表,分别是员工表t_staff(列包括id、姓名、性别、年龄),用户表t_user(列包括id、用户名、密码),
3,异常处理,未实现数据有效性验证。(上次已实现,这次主要练习目的是学习JDBC,故未实现)
4,MySQL数据库,客户端:SQLyog
1 CREATE DATABASE HRMS_db DEFAULT CHARSET utf8; 2 CREATE TABLE t_staff( 3 id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 4 NAME VARCHAR(5) NOT NULL, 5 sex VARCHAR(1) NOT NULL, 6 age INT NOT NULL 7 ); 8 9 SELECT * FROM t_staff;10 11 12 CREATE TABLE t_user(13 id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,14 NAME VARCHAR(10) NOT NULL,15 pswd VARCHAR(10) NOT NULL16 );17 18 SELECT * FROM t_user;
5,数据库工具类-用于人力资源管理系统,此次是把数据存入数据库,将对数据库的操作定义成方法,可以简化之后的程序,提高效率。
1 package hrms; 2 3 import java.sql.*; 4 5 /** 6 * 数据库工具类-用于人力资源管理系统,把数据存入数据库 7 * 8 * @author A_zhi 2016-9-8 9 * 10 */ 11 public class DBUtil { 12 /** 13 * 定义final变量 14 */ 15 public static final String DRIVER = "com.mysql.jdbc.Driver";//驱动 16 public static final String URL = "jdbc:mysql://localhost:3306/hrms_db?characterEncoding=utf-8";//地址 17 public static final String USER = "root";//客户端SQLyog用户名为“root” 18 public static final String PASSWORD = "";//客户端SQLyog无密码 19 private static Connection con = null; 20 21 /** 22 * 建立Java-MySQL间的连接 23 * 24 * @return con 25 * @throws Exception 26 */ 27 public static Connection getConnection() throws Exception { 28 Class.forName(DRIVER);//加载Java-MySQL驱动 29 con = DriverManager.getConnection(URL, USER, PASSWORD);//建立连接 30 return con;//返回连接 31 } 32 33 /** 34 * 关闭 Connection 35 * 36 * @throws Exception 37 */ 38 public static void closeConnection() throws Exception { 39 if (con != null && !con.isClosed()) { 40 con.close();//关闭连接 41 con = null; 42 } 43 } 44 45 /** 46 * 执行普通SQL命令 47 * 48 * @return 要执行的SQL语句 49 * @throws Exception 50 */ 51 public static int executeUpdate(String sql) throws Exception { 52 con = getConnection();// 连接数据库 53 Statement st = con.createStatement();// 创建SQL命令 54 int r = st.executeUpdate(sql);// 执行SQL命令 55 closeConnection();// 关闭 56 return r;// 返回 57 } 58 59 /** 60 * 执行预编译SQL命令,可执行带"?"参数的SQL语句(增加,删除,修改) 61 * 62 * @param sql 63 * 要执行的SQL命令 64 * @param obj 65 * 未知数目和类型的变量 66 * @return 要执行的SQL语句 67 * @throws Exception 68 */ 69 public static int executeUpdate(String sql, Object... obj) throws Exception { 70 con = getConnection(); 71 PreparedStatement pst = con.prepareStatement(sql);// 预编译SQL命令 72 if (obj != null && obj.length > 0) { 73 for (int i = 0; i < obj.length; i++) { 74 pst.setObject(i + 1, obj[i]);// 数据库从1开始, 75 } 76 } 77 int r = pst.executeUpdate(); 78 closeConnection(); 79 return r; 80 } 81 82 /** 83 * 账号验证 注册,登陆使用,输入用户名和密码存在返回true,否则返回false 84 * @param name 用户名 pswd 密码 85 * @return Boolean 86 * @throws Exception 87 */ 88 public static boolean queryLogin(String name,String pswd) throws Exception { 89 String sql = "select name from t_user where name=? and pswd=?"; 90 ResultSet rs = executeQuery(sql, name,pswd); 91 if (rs.next()) 92 return true; 93 else 94 return false; 95 } 96 97 /** 98 * 执行SQL查询命令 99 * 100 * @param sql101 * 要执行的查询SQL命令102 * @param obj103 * 未知数目和类型的变量104 * @return 结果集ResultSet105 * @throws Exception106 */107 public static ResultSet executeQuery(String sql, Object... obj) throws Exception {108 con = getConnection();109 PreparedStatement pst = con.prepareStatement(sql);// 还是预编译110 if (obj != null && obj.length > 0) {111 for (int i = 0; i < obj.length; i++) {112 pst.setObject(i + 1, obj[i]);113 }114 }115 ResultSet rs = pst.executeQuery();116 return rs;117 }118 }119 // 对于封装的查询方法,不能在方法中关闭Connection,否则无法在进行查询120 // 事先在方法外部定义Connection就是为了查询这个方法,其他方法中Connection可以定义在方法内121 // 采用脱离连接的行集可以实现关闭connection也能查询,以下附其关键语法122 // import javax.sql.rowset.CachedRowSet;123 // import com.sun.rowset.CachedRowSetImpl;124 // Connection con=DBUtil.getConnection();125 // PreparedStatement pst=con.prepareStatement(sql);127 // ResultSet rs=pst.executeQuery();128 // CachedRowSet crs=new CachedRowSetImpl();//创建行集129 // crs.populate(rs);//将结果集保存到行集130 // con.close();//关闭131 // crs.last();//再查询132 // System.out.println(crs.getString("name"));
6,人力资源管理系统,把数据存入数据库,运用封装,此类为系统的主界面以及操作方法,只有登录之后才能进入。
1 package hrms; 2 3 import java.util.Scanner; 4 import java.sql.*; 5 6 /** 7 * 人力资源管理系统,把数据存入数据库(运用封装) 8 * 9 * 此类提供主界面及其数据操作 10 * 11 * @author A_zhi 12 * 13 * 2016-9-8 14 * 15 * 数据库信息: 16 * 17 * CREATE DATABASE HRMS_db DEFAULT CHARSET utf8; CREATE TABLE t_staff( 18 * id INT PRIMARY KEY NOT NULL AUTO_INCREMENT , NAME VARCHAR(5) NOT 19 * NULL, sex VARCHAR(1) NOT NULL, age INT NOT NULL );SELECT * FROM 20 * t_staff; 21 * 22 */ 23 public class HrmsByJdbc { 24 public static Scanner sc = new Scanner(System.in); 25 26 /** 27 * 主界面,来自之前的复制 28 */ 29 public static void mainInterface() { 30 while (true) { 31 System.out.println("\n\n"); 32 System.out.println("**********************************************"); 33 System.out.println("* 人力资源管理系统 *"); 34 System.out.println("**********************************************"); 35 System.out.println("* 1、查看员工信息 *"); 36 System.out.println("* 2、添加员工信息 *"); 37 System.out.println("* 3、修改员工信息 *"); 38 System.out.println("* 4、删除员工信息 *"); 39 System.out.println("* 0、退出系统 *"); 40 System.out.println("**********************************************"); 41 System.out.print("请选择:"); 42 int num = sc.nextInt(); 43 if (num == 0) { 44 System.out.println("\n Thanks For Your Use!"); 45 System.exit(0);//退出系统,之前用的是break,但是它却返回到了登录界面,所以百度得到这个表达式 46 } else { 47 switch (num) { 48 case 1: 49 query();// 查询 50 break; 51 case 2: 52 add();// 添加 53 break; 54 case 3: 55 update();// 修改 56 break; 57 case 4: 58 del();// 删除 59 break; 60 default: 61 System.out.println("没有这个选项,请重新输入..."); 62 } 63 } 64 } 65 } 66 67 // 1、查询 68 private static void query() { 69 System.out.print("您要查询全部信息还是单个员工信息?\n a、全部,b、单个 :"); 70 String num1 = sc.next(); 71 String sql = null; 72 try { 73 switch (num1) { 74 case "a": 75 sql = "select * from t_staff"; 76 ResultSet rsa = DBUtil.executeQuery(sql);//调用工具类的方法 77 System.out.println("编号\t姓名\t性别\t年龄"); 78 while (rsa.next()) { 79 int id = rsa.getInt(1); 80 String name = rsa.getString(2); 81 String sex = rsa.getString(3); 82 int age = rsa.getInt(4); 83 System.out.println(id + "\t" + name + "\t" + sex + "\t" + age); 84 } 85 break; 86 case "b": 87 System.out.print("请输入您要查询的员工id:"); 88 int idnum = sc.nextInt(); 89 sql = "select * from t_staff where id=?"; 90 ResultSet rsb = DBUtil.executeQuery(sql, idnum); 91 System.out.println("编号\t姓名\t性别\t年龄"); 92 while (rsb.next()) { 93 int id = rsb.getInt(1); 94 String name = rsb.getString(2); 95 String sex = rsb.getString(3); 96 int age = rsb.getInt(4); 97 System.out.println(id + "\t" + name + "\t" + sex + "\t" + age); 98 } 99 break;100 default:101 System.out.println("没有这个选项,请重新输入...");102 break;103 }104 105 } catch (SQLException e) {106 System.out.println("数据库错误:" + e.getMessage());107 e.printStackTrace();108 } catch (Exception e) {109 System.out.println("其它错误" + e.getMessage());110 e.printStackTrace();111 } finally {112 try {113 DBUtil.closeConnection();114 } catch (Exception e) {115 System.out.println(e.getMessage());116 }117 }118 }119 120 // 2、添加121 private static void add() {122 System.out.println("\t数据录入");123 System.out.print("姓名:");124 String name = sc.next();125 System.out.print("性别:");126 String sex = sc.next();127 System.out.print("年龄:");128 int age = sc.nextInt();129 String sql = "INSERT INTO t_staff(NAME,sex,age) VALUES(?,?,?)";130 try {131 DBUtil.executeUpdate(sql, name, sex, age);132 System.out.println("添加成功");133 } catch (Exception e) {134 System.out.println("错误:" + e.getMessage());135 } finally {136 try {137 DBUtil.closeConnection();138 } catch (Exception e) {139 e.printStackTrace();140 }141 }142 }143 144 // 3、修改145 private static void update() {146 String s1 = "select * from t_staff where id=?";147 String s2 = "update t_staff set name=? where id=?";148 String s3 = "update t_staff set sex=? where id=?";149 String s4 = "update t_staff set age=? where id=?";150 System.out.print("请输入您要修改员工的id:");151 int idnum3 = sc.nextInt();152 try {153 ResultSet rsb = DBUtil.executeQuery(s1, idnum3);154 System.out.println("编号\t姓名\t性别\t年龄");155 while (rsb.next()) {156 int id = rsb.getInt(1);157 String name = rsb.getString(2);158 String sex = rsb.getString(3);159 int age = rsb.getInt(4);160 System.out.println(id + "\t" + name + "\t" + sex + "\t" + age);161 }162 System.out.print("你是需要修改此人信息吗? y/n: ");163 String as = sc.next();164 if ("y".equals(as)) {165 System.out.print("你要修改的是:a、姓名,b、性别,c、年龄 :");166 String as1 = sc.next();167 if ("a".equals(as1)) {168 System.out.print("请输入姓名:");169 String inname = sc.next();170 DBUtil.executeUpdate(s2, inname, idnum3);171 } else if ("b".equals(as1)) {172 System.out.print("请输入性别:");173 String sex = sc.next();174 DBUtil.executeUpdate(s3, sex, idnum3);175 } else if ("c".equals(as1)) {176 System.out.print("请输入年龄:");177 int age = sc.nextInt();178 DBUtil.executeUpdate(s4, age, idnum3);179 } else {180 System.out.println("输入错误,请重新输入...");181 }182 }183 System.out.println("修改成功!");184 } catch (Exception e) {185 e.printStackTrace();186 } finally {187 try {188 DBUtil.closeConnection();189 } catch (Exception e) {190 e.printStackTrace();191 }192 }193 194 }195 196 // 4、删除197 private static void del() {198 String s1 = "select * from t_staff where id=?";199 String s2 = "delete from t_staff where id=?";200 System.out.print("请输入您要删除员工的id:");201 int idnum4 = sc.nextInt();202 ResultSet rs4 = null;203 try {204 rs4 = DBUtil.executeQuery(s1, idnum4);205 System.out.println("编号\t姓名\t性别\t年龄");206 while (rs4.next()) {207 int id = rs4.getInt(1);208 String name = rs4.getString(2);209 String sex = rs4.getString(3);210 int age = rs4.getInt(4);211 System.out.println(id + "\t" + name + "\t" + sex + "\t" + age);212 }213 System.out.print("您确定要删除此人信息吗? y/n:");214 String as = sc.next();215 if ("y".equals(as)) {216 DBUtil.executeUpdate(s2, idnum4);217 System.out.println("删除成功!");218 } else {219 System.out.println("删除取消!");220 }221 } catch (Exception e) {222 e.getMessage();223 } finally {224 try {225 DBUtil.closeConnection();226 } catch (Exception e) {227 e.printStackTrace();228 }229 }230 }231 }
7,登录类,提供账户注册、登录、修改密码的方法
1 package hrms; 2 3 import java.util.Scanner; 4 5 /** 6 * 人力资源管理系统 用户操作 7 * 8 * 提供注册,登录,修改密码的方法 9 * 10 * 数据库信息:11 * 12 * CREATE TABLE t_user( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, NAME13 * VARCHAR(10) NOT NULL, pswd VARCHAR(10) NOT NULL );14 * 15 * @author A_zhi16 * 17 * 2016-9-918 */19 public class Login {20 private static Scanner sc = new Scanner(System.in);21 22 /**23 * 注册24 * 25 * @throws Exception26 */27 public static void register() throws Exception {28 System.out.println("\n");29 System.out.println("*--------------------------------------------*");30 System.out.println("*++++++++++欢迎登录人力资源管理系统+++++++++++*");31 System.out.println("*--------------------------------------------*");32 String sql = "insert into t_user(name,pswd) values(?,?)";33 System.out.println("\n");34 while (true) {35 System.out.print("请输入用户名:");36 String inname = sc.next();37 System.out.print(" 请设置密码:");38 String inpswd = sc.next();39 boolean b = DBUtil.queryLogin(inname, inpswd);40 if (b) {41 System.out.println("\n该用户名已存在,请重新输入...");42 } else {43 DBUtil.executeUpdate(sql, inname, inpswd);44 System.out.print("\n注册成功!欢迎登录!是否立即登陆?y/n :");45 String as = sc.next();46 if ("y".equals(as)) {47 login();48 }49 break;50 }51 }52 }53 54 /**55 * 登录56 */57 public static void login() throws Exception {58 System.out.println("\n");59 int count = 0;60 System.out.println("*--------------------------------------------*");61 System.out.println("*++++++++++欢迎登录人力资源管理系统+++++++++++*");62 System.out.println("*--------------------------------------------*");63 while (true) {64 System.out.println();65 System.out.print("请输入用户名:");66 String inname = sc.next();67 System.out.print(" 请输入密码:");68 String inpswd = sc.next();69 boolean b = DBUtil.queryLogin(inname, inpswd);70 if (b) {71 System.out.println("即将进入...");72 HrmsByJdbc.mainInterface();73 } else {74 count++;75 System.out.println("账号与密码不匹配,请重新输入...\n");76 }77 if (count == 3) {78 System.out.println("您连续三次输入错误,已退出!");79 break;80 }81 }82 }83 84 /**85 * 修改密码86 * 87 * @throws Exception88 */89 public static void updatePswd() throws Exception {90 91 System.out.print("密码修改,之后补充!");92 login();93 94 }95 }
8,注册登录的主界面,提供主方法,是程序执行的入口
1 package hrms; 2 3 import java.util.Scanner; 4 5 /** 6 * 人力资源管理系统 7 * 8 * 注册登录界面,程序执行入口 9 * 10 * @author A_zhi11 *12 * 2016-9-1113 */14 public class TextLogin {15 16 public static void main(String[] args) throws Exception {17 Scanner sc = new Scanner(System.in);18 while (true) {19 System.out.println("\n");20 System.out.println("*--------------------------------------------*");21 System.out.println("*++++++++++欢迎登录人力资源管理系统+++++++++++*");22 System.out.println("*--------------------------------------------*");23 System.out.println("*++++++++++++++++1,注册++++++++++++++++++++++*");24 System.out.println();25 System.out.println("*++++++++++++++++2,登陆++++++++++++++++++++++*");26 System.out.println();27 System.out.println("*++++++++++++++++3,修改密码++++++++++++++++++*");28 System.out.println();29 System.out.println("*++++++++++++++++0,退出++++++++++++++++++++++*");30 System.out.print("请选择:");31 int num = sc.nextInt();32 if (num == 0) {33 System.out.println("\n Thanks For Your Use!");34 break;35 } else {36 switch (num) {37 case 1:38 Login.register();39 break;40 case 2:41 Login.login();42 break;43 case 3:44 Login.updatePswd();;45 break;46 default:47 System.out.println("没有这个选项,请重新输入...");48 }49 }50 }51 sc.close();52 }53 }
至今学习Java已有一月有余,去上课前两天,我在家自己看看视频,当时在DOS输出了一个hello world我都很高兴,一个多月过去了,程序从几行变成了上百行,这段时间很辛苦,很累,但是收获还是有的,虽然我不知道学了一个多月,能到现在的水平是够了还是不够,但是我问心无愧,我努力了。Java知识太多了,这段时间每天讲的都很多,有的甚至来不及消化,就又开始了新的内容,每天早上7点起床去学Java,下午7点回来,吃了饭再看看,还是感觉时间不够。接下来的时间还需要更加努力。
那天晚上在一个Java学习群,有个自学了几天的朋友发了一个for循环的语句,但是是错的,他说他看着视频就能写,不看视频就出错,就是记不住,我回应道,没有什么代码是你去写十遍记不住的,如果有那就再写十遍。我以后也会尽量再多写对练的。
加油!坚持!
A_zhi
2016-9-11
初学Java8:通过JDBC实现简易人力资源管理系统