[JAVA]JDBC如何实现写数据?——利用Java更新与删除MySQL中存储的数据(下)

在日常工作中,如果需要更改公司员工信息数据,或者需要删除一些离职员工信息数据,在这种场景下,我们如何实现对员工数据库的一些更新删除操作呢?本章我们将学习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;
        }
    }
}

执行测试结果:

061ee955d6374d39a6cb805a35881266.png

 96d2a69daf8f467ea4cf2032ca31a0f5.png

员工薪资被成功修改 

如果我们写一个不存在的员工编号,会显示什么结果?

 41fb365b6de344269c2badc0755db353.png

 删除离职员工信息

删除操作—删除离职员工信息 (基于完整上述代码做一些改动)

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;
        }
    }
}

最后执行代码,查看结果:

e31e7006546e473f8d1c7095e8a3e1bb.png

56f24d53559a40f09dabb93634639543.png我们再次查看MySQL中的数据表,编号为3990的员工数据已被删除

063999eb8d2e4558b6c266871a128e59.png

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值