// 第一版
// 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;
}
}

参考资料:

05-26 20:38