JDBC,DataSource,DriverManager

JDBC:Java Data Base Connectivity(Java数据库连接)。官方解释它是Java编程语言和广泛数据库之间独立于数据库的连接标准的Java API,根本上说JDBC是一种规范,它提供一套完整的接口,允许便捷式访问底层数据库。
JDBC是java访问数据库的基石,JDO,Hibernate,Mybatis等只是更好的封装了JDBC。
JDBC驱动:由各个数据库厂商去编写数据库驱动,实现JDBC的规范接口。Mysql,Oracle,DB2等都自己编写各自的驱动。
JDBC,DataSource,DriverManager_第1张图片
JDBC,DataSource,DriverManager_第2张图片
JDBC,DataSource,DriverManager_第3张图片

JDBC连接数据库的两种方式:DriverManager及DataSource

准备好配置文件jdbc.properties(两种方式都使用配置文件):

username=root
password=root
url=jdbc:mysql://localhost:3306/book
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=10

方法1:使用java.sql.DriverManager类
驱动管理器类,用于管理所有注册的驱动程序。

public void testConnection() throws Exception {

        //1.读取配置文件中连接数据库的基本信息
        InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(in);

        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driverClassName = properties.getProperty("driverClassName");

        //2.加载Driver,Driver内部执行了registerDriver,加载了驱动
        //所以 DriverManager.registerDriver(driver) 可省略
        Class.forName(driverClassName);

        //3.跟据地址和用户密码获取连接
        Connection connection = DriverManager.getConnection(url, user, password);

    }

方法2:使用实现了javax.sql.DataSource接口的子类
(注:DataSource 接口是 JDBC 2.0 API 中的新增内容,它提供了连接到数据源的另一种方法。使用 DataSource 对象是连接到数据源的首选方法。
作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。DataSource接口由驱动程序供应商实现。共有三种类型的实现:

  1. 基本实现 - 生成标准的 Connection 对象
  2. 连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。
  3. 分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。

Sun公司约定:如果是连接池技术,都需要实现javax.sql.DataSource接口。
DBCP,Druid,c3p0三大常用的数据库连接池,都实现了DataSource接口。

DBCP连接池:

DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件:
Commons-dbcp.jar:连接池的实现
Commons-pool.jar:连接池实现的依赖库

Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

		// 加载prop配置文件
		Properties prop = new Properties();
		// 获取文件流
		InputStream inStream = App_DBCP.class.getResourceAsStream("db.properties");
		// 加载属性配置文件
		prop.load(inStream);
		// 根据prop配置,直接创建数据源对象
		DataSource dataSouce = BasicDataSourceFactory.createDataSource(prop);
		// 获取连接
		Connection con = dataSouce.getConnection();

druid

阿里出品,淘宝与支付宝专用的数据库连接池,它还包括了一个ProxyDriver、一系列内置的JDBC组件库,一个SQL Parser。支持所有JDBC兼容的数据库。Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。
druid连接池实现:

public class JdbcUtils {

    private static DruidDataSource dataSource;

    static {
        try {
            Properties properties = new Properties();
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
            properties.load(in);

            dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static Connection getConnection(){
        Connection connection = null;
        try {
            connection = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    public static void close(Connection connection){
        if(connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

}

总结

DataSource 和DriverManager区别:
1.获取的对象不同。DataSource主要是获取数据库连接池,而DriverManager主要是获取数据库连接,通过管理JDBC驱动程序来建立连接。
2.DataSource中封装了DriverManager的使用。
3.DataSource创建的connection既有基本实现,也有连接池实现(可以复用,DataSource帮我们实现了复用机制),而DriverManager创建的connection则不能复用。

文章部分参考:JDBC连接数据库的两种方式

你可能感兴趣的:(JDBC,DataSource,DriverManager)