1. 目的
每次使用JDBC的时候都要书写冗长的代码段,不符合复用的理念,于是要单独写一个类,将通用的JDBC操作写到一个类中,便于重复使用和精简代码。
2. 步骤
(1)注册驱动并获取连接
为了最大精简获取连接的简化性和通用性,这里需要使用到配置文件 jdbc.properties 解决。
1) 创建一个文件,放到项目中,要更换别的连接时,只需修改配置文件即可,无需修改类文件和重新编译。
driver=数据库驱动路径 url=url连接字符串 user=用户名 password=密码
2) 然后就需要将配置文件中键值对中的值取出,并注册了驱动。因为驱动和取出配置文件只需要一次就可以,所以就写入到静态代码块中,在程序运行的开始就处理好了,无需以后再冗余执行。
// 定义静态变量,使用静态代码获取配置文件的值
private static String url; private static String user; private static String password; private static String driver; // 使用静态代码注册驱动并给静态变量赋值
static{ try { // 创建Properties集合类
Properties pro = new Properties(); // 获取src路径下文件,使用ClassLoader类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader(); // URL定位了文件的绝对路径
URL res = classLoader.getResource("jdbc.properties"); // 获取字符串路径
String path = res.getPath(); // 读取文件
pro.load(new FileReader(path)); // 给静态变量赋值
url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); driver = pro.getProperty("driver"); // 注册驱动
Class.forName(driver); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } }
3) 获取连接
public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); }
(2)释放资源
因为有的sql语句需要用结果集对象,所以使用两个重载方法释放资源。
/** * @Author ZhaoPeiXuan * @Description 释放资源 * @Date 22:08 2019/9/16 * @Param [stmt 执行sql的对象, conn 数据库连接对象] * @return void **/
public static void close(Statement stmt, Connection conn){ if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * @Author ZhaoPeiXuan * @Description 释放资源Pro版 * @Date 22:13 2019/9/16 * @Param [rs 结果集对象, stmt 执行sql的对象, conn 数据库连接对象] * @return void **/
public static void close(ResultSet rs, Statement stmt, Connection conn){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
3. 简化后的代码
Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = JDBCUtils.getConnection(); String sql = "SQL语句"; stmt = conn.createStatement(); rs = stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtils.close(rs, stmt, conn); }