// 第一版 // src 目录下 dbconfig.properties 配置文件, 用来配置四大参数 // 注意 properties 配置文件中没有分号结尾, 也没有引号 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mydb1 username=root password=root // JdbcUtils 类 public class JdbcUtils{ public static Connection getConnection() throws IOException, ClassNotFoudException,SQLException{ // 加载配置文件 // 因为配置文件在 src 目录下 InputStream in = JdbcUtils.class.getClassLoader() .getResourceAsStream("dbconfig.properties"); // 使用 properties 集合的 load() 方法, // 将输入流中的内容加载到 properties 集合中 Properties props = new Properties(); props.load(in); // 加载驱动类 Class.forName(props.getProperty("driverClassName")); // 获取 Connection 对象 return DriverManager.getConnection( props.getProperty("url"), props.getProperty("username"), props.getProperty("password") ); } }// 第一次升级// 如果两次调用 JdbcUtils.getConnection() 方法,需要加载两次配置文件.// 驱动类也需要执行多次. 而实际上, 配置文件和驱动类只需要加载一次即可 public class JdbcUtils{ private static Properties props = null; // 静态代码块, 只在 JdbcUtils 加载时, 执行一次该代码块 static{ // 给 props 进行初始化, 即加载 dbconfig.properties 配置文件到 props 对象中 try{ InputStream in = JdbcUtils.class.getClassLoader() .getResourceAsStream("dbconfig.properties"); props = new Properties(); props.load(in); }catch(IOException e){ throw new RuntimeException(e); } // 加载驱动类 try{ Class.forName(props.getProperty("driverClassName")); }catch(ClassNotFoundException e){ throw new RuntimeException(e); } } // 获取 Connection 对象 public static Connection getConnection() throws SQLException{ return DriverManager.getConnection( props.getProperty("url"), props.getProperty("username"), props.getProperty("password") ); } }// 第二版: 使用 c3p0 连接池获取连接对象 public class JdbcUtils { // 使用的是配置文件的默认配置, 要求在 src 目录下给出 c3p0-config.xml private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); // 使用连接池获取连接对象 public static Connection getConnection() throws SQLException{ return dataSource.getConnection(); } // 返回连接池对象 public static DataSource getDataSource(){ return dataSource; } }
参考资料: