二、实现数据库连接的工具类——JDBCUtils
从上面书写Dao接口实现类的时候我们发现,每当我要对数据库进行操作就要建立一个连接,书写六大步骤,是不是过于繁琐呢?因此我们直接实现一个数据库连接的工具类来减少重复代码的书写。
1、JDBCUtils的具体代码实现
package com.bz.util; import java.sql.*; /** * 工具类:方便方法调用,所有方法都应为静态方法 */ public class JDBCUtils { public static Connection getConnection(){ Connection conn =null; try { //1. 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2. 获取连接 //用户名 String username = "root"; //密码 String pwd = "123456"; //连接的url String url = "jdbc:mysql://localhost:3306/baizhi2109?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"; conn = DriverManager.getConnection(url, username, pwd); }catch (ClassNotFoundException e){ System.out.println("驱动路径不正确"); }catch (SQLException e){ System.out.println("获取连接失败"); }catch (Exception e){ System.out.println("未知异常"); e.printStackTrace(); } return conn; } /** * 关闭资源连接 非空判断:防止空指针 * @param rs * @param ps * @param conn */ public static void close(ResultSet rs, PreparedStatement ps,Connection conn){ if (rs!=null){ try { rs.close(); } catch (SQLException e) { System.out.println("关闭rs失败"); } } if (ps!=null){ try { ps.close(); } catch (SQLException e) { System.out.println("关闭ps失败"); } } if (conn!=null){ try { conn.close(); } catch (SQLException e) { System.out.println("关闭conn失败"); } } } }
2、调用工具类
public class UserDaoImpl implements UserDao { @Override public int insertUser(User user) throws Exception{ //调用工具类的方法获取连接 Connection conn=JDBCUtils.getConnection(); //3. 获取发送SQL的工具 String sql="insert into t_user (u_name,u_sex,u_age) VALUES(?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); //4. 发送并执行SQL //给占位符赋值:用参数对象的值给表中字段赋值 ps.setString(1,user.getName()); ps.setString(2,user.getSex()); ps.setInt(3,user.getAge()); int n=ps.executeUpdate(); //5. 处理结果集 略 //6.调用工具类方法关闭资源 JDBCUtils.close(null,ps,conn); return n;//把受影响行数返回 } }