你的位置:首页 > Java教程

[Java教程]初学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