手记

【备战春招】第13天 Java与数据库连接的桥梁(JDBC第二部分)

课程名称:Java工程师2022版
课程章节:Java与数据库连接的桥梁
课程讲师:IT老齐 悟空 八戒猪 神思者 Leo
课程内容:JDBC第二部分

一、JDBC工具类的抽取及增删改
1.封装DbUtils工具类

package com.imooc.jdbc.common;
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","1314520Gx");
        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驱动,创建数据库连接,关闭连接,释放资源。主要集中实现的是重复性的,多次出现的代码逻辑,起到简化代码的作用。
2.JDBC实现新增数据

package com.imooc.jdbc.hrapp.command;
import com.imooc.jdbc.common.DbUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

//新增员工数据
public class InsertCommand implements Command{
    @Override
    public void execute() {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入员工编号:");
        int eno = in.nextInt();
        System.out.println("请输入员工姓名:");
        String ename = in.next();
        System.out.println("请输入员工薪资:");
        float salary = in.nextFloat();
        System.out.println("请输入隶属部门:");
        String dname = in.next();

        Connection conn = null;
        PreparedStatement pstmt = null;
        try {
            conn = DbUtils.getConnection();
            String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1,eno);
            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);
        }

    }
}

向MySQL数据库中增加员工的主要部分是sql的写入规则,在传入值的时候一定要使用???传入,然后使用PrepareStatement函数,这样做也能防止SQL注入;然后就是新增操作后,一定要使用executeUpdate函数,不管是增删改查都要使用这个函数,最后就是利用DbUtils工具类释放资源。
3.实现JDBC更新与删除数据
JDBC执行UPDATE语句。

String sql = "update employee set salary = salary + 1000 where dname=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"研发部");
//executeUpdate 方法返回记录数
int cnt = pstmt.executeUpdate();
System.out.println("研发部"+cnt+"名员工提薪1000元");

JDBC执行DELETE语句

String sql = "delete from employee where eno=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,3395);
//executeUpdate方法返回记录数
int cnt = pstmt.executeUpdate();
System.out.println(cnt+"名员工数据已被删除");

关于DELETE语句的逻辑中,不同于新增和删除的是,返回的可能0,也可能是1,选择的数据是存在的话返回的就是1,如果选择的数据不存在的话就是0。

课程总结:

完成了今天的学习目标:
1.JDBC工具类的抽取及增删改

0人推荐
随时随地看视频
慕课网APP