在之前的内容中,我们发现,当我们执行一条语句时,每新建一个方法,就要重新连接一次数据库,代码重复率很高,那么能不能把这些重复代码封装成一个类呢,我们学习方法时,就学习到方法就是为了提高代码的利用率,所以我们就想能不能封装一个类,把链接数据库,关闭流等封装成方法,这样就大大减少了代码量,实现代码的整洁行,也更符合面对对象的思维。具体实现如下:
package JDBCUtils; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class JDBCUtils { private static String driver; private static String url; private static String dbuser; private static String dbpwd; private static Connection conn = null; // 静态代码块 static{ /*在之前我们读文件时,用的方法是 * InputStream in =new FileInputStream("E:\ideaProject\AAAstudys\d38\src\sql.properties"); * 在这里写新的方法,将外部properties文件放在src同级文件夹中,用类的加载器读文件,格式: * 当前类名.class.getClassLoader().getResourceAsStream("外部文件名");*/ InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("sql.properties"); Properties p=new Properties(); try { p.load(in); } catch (IOException e) { e.printStackTrace(); } // 读文件给变量赋值 driver = p.getProperty("driver"); url = p.getProperty("url"); dbuser = p.getProperty("dbuser"); dbpwd = p.getProperty("dbpwd"); try { Class.forName(driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } // 构造获得数据库链接方法 public static Connection getConnection() { try { conn = DriverManager.getConnection(url, dbuser, dbpwd); } catch (SQLException e) { e.printStackTrace(); } return conn; } // 构造关闭流的方法 public static void close(Connection conn,Statement stat) { if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 重载关闭流的方法 public static void close(Connection conn,Statement stat, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (stat != null) { try { stat.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
测试类:
package JDBCUtils; import java.sql.Connection; import java.sql.Statement; public class Test2 { public static void main(String[] args) throws Exception { Connection conn = JDBCUtils.getConnection(); String sql = "update sort set sname='迪迦' where sid=2"; Statement stat = conn.createStatement(); stat.executeUpdate(sql); JDBCUtils.close(conn,stat); } }
外部sql.properties文件:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/qy97 dbuser=root dbpwd=123456