JDBC工具类创建 绝地灬酷狼 2021-06-24 16:10 482阅读 0赞 # JDBC工具类创建 # ## 1. 资源释放工作的整合 ## JDBCUtil.release(conn, st, rs); 将ResultSet、Statement、Connection的释放放在一个类里。 public class JDBCUtil { /** * 释放资源 * * @param conn * @param st * @param rs */ public static void release(Connection conn, Statement st, ResultSet rs) { closeRs(rs); closeSt(st); closeConn(conn); } // 释放ResultSet对象 private static void closeRs(ResultSet rs) { System.out.println("释放ResultSet对象"); try { if (rs != null) { rs.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { rs = null; } } // 释放Statement对象 private static void closeSt(Statement st) { System.out.println("释放Statement对象。"); try { if (st != null) { st.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { st = null; } } // 释放数据库连接。 private static void closeConn(Connection conn) { System.out.println("释放数据库连接。"); try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { conn = null; } } } ## 2. 驱动防二次注册 ## DriverManager.registerDriver(new com.mysql.jdbc.Driver()); Driver这个类里面有静态代码块,一上来就执行了驱动的注册,所以等同于我们注册了两次驱动,其实没这个必要。 参照文档,最后形成以下代码即可: Class.forName("com.mysql.jdbc.Driver"); ## 3. 建立连接 ## 把建立连接的部分放入一个类。初步整合起来。 public class JDBCUtil { static String url = "jdbc:mysql://localhost/factory"; static String user = "root"; static String passwd = "0000"; /** * 建立连接。 * * @return */ public static Connection getConn() { registerDriver(); Connection conn = null; try { // 2. 建立连接 参数1:协议+访问数据库 参数2:用户名 参数3:密码 conn = DriverManager.getConnection(url, user, passwd); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 注册驱动 */ public static void registerDriver() { // DriverManager.registerDriver(new com.mysql.jdbc.Driver()); try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 这样做只是初步进行了整合,我们接下来还要对上述代码进行修改。 ## 4. 使用properties配置文件 ## 现在发现使用JDBC进行连接的各种属性是直接放在代码里的,我们为了方便维护和修改,我们把这些信息都保存在一个文件中,在程序中去读取这个文件,这样以后修改相关信息的时候就直接修改文件就可以了,而不用去代码翻来翻去。 ### 创建properties ### 在src下声明一个文件`jdbc.properties`,内容如下: driverClass=com.mysql.jdbc.Driver url=jdbc:mysql://localhost/TABLE user=username passwd=password ### 读取properties ### 在工具类里面,使用静态代码块,读取属性。 改写上面的部分代码。 static String driverClass = null; static String url = null; static String user = null; static String passwd = null; static { try { // 1. 创建一个属性配置对象 Properties properties = new Properties(); // 2. 把properties文件转化为inputstream流 //方法一:如果把properties文件放在工程的根目录下,可以使用下面的语句读取这个文件 //InputStream is = new FileInputStream("jdbc.properties"); //方法二:使用类加载器,去读取src目录下的资源文件 InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"); // 3. 导入输入流。 properties.load(is); // 4. 读取属性 driverClass = properties.getProperty("driverClass"); url = properties.getProperty("url"); user = properties.getProperty("user"); passwd = properties.getProperty("passwd"); } catch (Exception e) { e.printStackTrace(); } } 在后面注册驱动的时候,参数直接使用上面建立好的driverClass就可以了。 /** * 注册驱动 */ public static void registerDriver() { // DriverManager.registerDriver(new com.mysql.jdbc.Driver()); try { Class.forName(driverClass); } catch (ClassNotFoundException e) { e.printStackTrace(); } } ## 注册驱动的小细节 ## 我们尝试注释掉注册驱动的语句: //Class.forName(driverClass); 重新运行程序,发现没有任何问题。那么原因是什么呢,我们看一下 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70] 大意就是4.0版本之后不需要使用`Class.forName();`语句注册了,它会自动帮我们注册驱动。 ## 总结 ## 我们把JDBC用的一些代码进行整合复用,形成JDBC工具类。主要是资源释放工作的整合,以及驱动的防二次注册,还把建立连接的过程封装起来,并使用properties读取属性,方便以后的维护。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1NjUxMjc_size_16_color_FFFFFF_t_70]: /images/20210615/bc31734e5ede4721b1fcc50234e3e590.png
还没有评论,来说两句吧...