[JAVA]JDBC如何实现写数据?——利用Java新增MySQL中存储的员工字段信息(上)

我们在日常工作中,可能需要处理一些数据,例如新员工入职,需要我们在自己的员工数据库内插入新员工的各种信息,这里我们可以利用JDBC连接数据库后,再进行读取与写入数据库操作。

我们在实现JDBC写数据之前需要先工具类做一些前置准备。—封装DbUtils工具类,是一个用于操作数据库的工具类,它提供了一些便捷的方式来执行SQL语句,获取数据库连接等。简化程序的开发。DbUtils工具类主要帮我们封装,打开连接,关闭连接的对应方法。

定义DbUtils类,用于与MySQL数据库建立连接以及关闭数据库连接资源

import java.sql.*;

public class DbUtils {
    /**
     * 创建新的数据库连接
     *
     * @return 返回新的Connection对象
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public static Connection getConnection() throws SQLException, ClassNotFoundException {
        //1.加载并注册JDBC驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.创建数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true","root","123456");
        return conn;
    }

    /**
     * 关闭连接,释放资源
     *
     * @param rs   结果集对象
     * @param stmt Statement对象
     * @param conn Connection对象
     */
    public static void closeConnection(ResultSet rs, Statement stmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null && !conn.isClosed()) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在JDBC中如何新增员工数据,在SQL中使用INSERT语句

创建InsertCommand公共类 并声明该类实现Command接口,意味着该类必须实现Command接口中定义的方法

public interface Command {
    public void execute();//定义方法

}
//定义一个名为Command的接口,而实现该接口的类必须提供这些方法的具体实现。
package hrapp;

import common.DbUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * 新增员工数据
 */
public class InsertCommand implements Command {

    @Override
    public void execute() {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入员工编号");
        int eno = in.nextInt();
        System.out.print("请输入员工姓名");
        String ename = in.next();
        System.out.print("请输入员工薪资");
        float salary = in.nextFloat();
        System.out.print("请输入隶属部门");
        String dname = in.next();
        Connection conn = null;
        PreparedStatement pstmt = null;
        //新增数据 使用DbUtils获取数据库连接以及释放资源
        try {
            conn = DbUtils.getConnection();//会抛出俩个异常,用try-catch捕获
            String sql = "insert into employee(eno,ename,salary,dname)values(?,?,?,?) ";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, eno);//1代表第一个参数
            pstmt.setString(2, ename);
            pstmt.setFloat(3, salary);
            pstmt.setString(4, dname);
            int cnt = pstmt.executeUpdate();//所有写操作都使用executeUpdate
            System.out.println("cnt:" + cnt);
            System.out.println(ename + "员工入职手续已办理");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            DbUtils.closeConnection(null, pstmt, conn);
        }
    }
}

重点理解这些有关新增数据的代码操作 

Connection conn = null;

....

 conn = DbUtils.getConnection();

 使用之前定义过的DbUtils来获取数据库连接和释放资源,得到的是一个Connection对象,他会抛出俩个异常,故用try—catch进行捕获,同时将Connection对象在try块外面进行声明。

 String sql = "insert into employee(eno,ename,salary,dname)values(?,?,?,?) ";

 作用为SQL插入语句

PreparedStatement pstmt = null;
......

pstmt = conn.prepareStatement(sql);

通过调用conn.prepareStatement(sql)方法创建一个预编译的SQL语句对象pstmt。预编译的语句可以提高性能并防止SQL注入攻击

  pstmt.setInt(1, eno);//1代表第一个参数
  pstmt.setString(2, ename);
  pstmt.setFloat(3, salary);
  pstmt.setString(4, dname);

设置SQL语句中的参数,第一个参数是参数的位置索引,从1开始。通过这些方法,可以将Java变量的值绑定到SQL语句中的参数,确保SQL语句的动态性和安全性。 

  int cnt = pstmt.executeUpdate();

 执行SQL语句,这里用于插入一条员工记录。executeUpdate()方法返回一个整数,表示受SQL语句影响的行数。如果插入成功,通常返回值为1。

 System.out.println("cnt:" + cnt);

输出受影响的行数,用于确认插入操作是否成功执行

 System.out.println(ename + "员工入职手续已办理");

输出一条提示信息,表明员工的入职手续已办理完成,使用了参数ename来显示员工的名字 

  DbUtils.closeConnection(null, pstmt, conn);

 以上是有关员工的新增记录操作代码,然后我们打开入口类 HumanResourceApplication

,在入口类增加 办理员工入职的对应菜单

import java.util.Scanner;

public class HumanResourceApplication {
    public static void main(String[] args) {
        System.out.println("1-查询部门员工");
        System.out.println("2-办理员工入职");
        System.out.println("请选择功能:");
        Scanner in = new Scanner(System.in);
        Integer cmd = in.nextInt();
        Command command = null;
        switch (cmd) {
            case 1:   //查询部门员工
                command = new PstmtQueryCommand();
                command.execute();
                break;
            case 2:   //办理员工入职
                command = new InsertCommand();
                command.execute();
                break;


        }
    }
}

此时,代码创建完成,运行测试看新增员工数据操作能否实现

逐步输入要添加的员工数据 

查看数据库,此条新增的员工数据被成功添加。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值