一、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工具类的抽取及增删改