课程名称: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工具类的抽取及增删改