在日常工作中,如果需要更改公司员工信息数据,或者需要删除一些离职员工信息数据,在这种场景下,我们如何实现对员工数据库的一些更新删除操作呢?本章我们将学习JDBC对数据进行更新操作,以及JDBC对数据进行删除的操作。
更新操作—更新员工薪资数据
1.首先读取用户输入的数据,获取要更新薪资的员工编号
public class UpdateCommand implements Command { //定义公共类,并实现Command接口
@Override
public void execute() {
Scanner in = new Scanner(System.in);
System.out.print("请输入员工编号");
int eno = in.nextInt();
System.out.print("请输入员工新的薪资");
float salary = in.nextFloat();
2.获取数据库连接,并编写一个用于更新员工薪资的SQL语句
conn = DbUtils.getConnection();//得到数据库连接
String sql = "update employee set salary=? where eno=?";
pstmt = conn.prepareStatement(sql);
//update employee:表明要更新名为employee的表
//set salary=?:设置表中的salary(工资)列的值为一个占位符?,这个占位符通常在后续代码中会被具体值替换
//where eno=?:表示更新的条件是表中的eno(员工编号)列等于另一个占位符?
3. 设置占位符的值,然后执行更新操作
pstmt.setFloat(1, salary);
pstmt.setInt(2, eno);
int cnt = pstmt.executeUpdate();
这段代码是设置PreparedStatement对象中的占位符的值,分别更新的薪资值和员工编号。
setFloat(1,salary)表示将第一个占位符(?)设置为salary的值。
setInt(2,eno)表示将第二个占位符(?)设置为eno的值。
executeUpdate()方法用于执行SQL的插入,更新或删除操作,并返回受影响的行数,将返回值赋给cnt变量,这样可以知道有多少行数据被更新了。
4.根据executeUpdate()方法将受影响的行数赋给cnt变量,例cnt值为1则代表数据更新成功,反之,更新不成功。
if (cnt == 1) {
System.out.println("员工薪资调整完毕");
} else {
System.out.print("未找到" + eno + "编号员工数据");
}
5.关闭数据库连接
finally {
DbUtils.closeConnection(null, pstmt, conn);
}
完整代码如下:
import java.util.Scanner;
/**
* 员工调薪
*/
public class UpdateCommand implements Command {
@Override
public void execute() {
Scanner in = new Scanner(System.in); //读取要查询的信息
System.out.print("请输入员工编号");
int eno = in.nextInt();
System.out.print("请输入员工新的薪资");
float salary = in.nextFloat();
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DbUtils.getConnection(); //获取数据库连接,编写更新语句
String sql = "update employee set salary=? where eno=?";
pstmt = conn.prepareStatement(sql);
pstmt.setFloat(1, salary); //将值赋给占位符,并进行更新操作
pstmt.setInt(2, eno);
int cnt = pstmt.executeUpdate();
if (cnt == 1) { //判断是否更新成功
System.out.println("员工薪资调整完毕");
} else {
System.out.print("未找到" + eno + "编号员工数据");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally { //关闭数据库连接
DbUtils.closeConnection(null, pstmt, conn);
}
}
}
然后我们在入口类写 调整薪资的选项
import java.util.Scanner;
public class HumanResourceApplication {
public static void main(String[] args) {
System.out.println("1-查询部门员工");
System.out.println("2-办理员工入职");
System.out.println("3-调整薪资");
System.out.println("请选择功能:");
Scanner in = new Scanner(System.in);
Integer cmd = in.nextInt();
Command command = null;
switch (cmd) {
case 1: //查询部门员工
command = new QueryCommand();
command.execute();
break;
case 2: //办理员工入职
command = new InsertCommand();
command.execute();
break;
case 3: //调整薪资
command = new UpdateCommand();
command.execute();
break;
}
}
}
执行测试结果:
员工薪资被成功修改
如果我们写一个不存在的员工编号,会显示什么结果?
删除离职员工信息
删除操作—删除离职员工信息 (基于完整上述代码做一些改动)
1.读取用户输入的数据
Scanner in = new Scanner(System.in);
System.out.print("请输入员工编号");
int eno = in.nextInt();
2.获取数据库连接,并编写一个用于删除员工信息的SQL语句
conn = DbUtils.getConnection(); //数据库连接
String sql = "delete from employee where eno=?";
pstmt = conn.prepareStatement(sql);
3.设置占位符的值为eno,并执行删除操作
pstmt.setFloat(1, eno);
int cnt = pstmt.executeUpdate();
4.根据executeUpdate()方法将受影响的行数赋给cnt变量,例cnt值为1则代表数据删除成功,反之,删除不成功。
if (cnt == 1) {
System.out.println("员工离职手续已完成");
} else {
System.out.print("未找到" + eno + "编号员工数据");
}
5.关闭数据库连接
finally {
DbUtils.closeConnection(null, pstmt, conn);
}
然后根据上述类似方法,在入口类写 员工离职的选项
public class HumanResourceApplication {
public static void main(String[] args) {
System.out.println("1-查询部门员工");
System.out.println("2-办理员工入职");
System.out.println("3-调整薪资");
System.out.println("4-员工离职");
System.out.println("请选择功能:");
Scanner in = new Scanner(System.in);
Integer cmd = in.nextInt();
Command command = null;
switch (cmd) {
case 1: //查询部门员工
command = new QueryCommand();
command.execute();
break;
case 2: //办理员工入职
command = new InsertCommand();
command.execute();
break;
case 3: //调整员工薪资
command = new UpdateCommand();
command.execute();
break;
case 4: //删除离职员工信息
command = new DeleteCommand();
command.execute();
break;
}
}
}
最后执行代码,查看结果:
我们再次查看MySQL中的数据表,编号为3990的员工数据已被删除