为什么我们使用的数据源,而不是DriverManager的吗?(Why do we use a Da

2019-07-20 22:26发布

我读了Java JDBC规范(VR 4)和我encountred这样的说法:

数据源 - 此接口的JDBC 2.0可选包API中推出。 它优于DriverManager的,因为它允许对底层数据源的信息是透明的应用程序

我想了解的区别是什么之间ConnectionDataSource ,为什么它的存在。 我的意思是,上面的块说,有关数据源的细节是透明的应用程序,但不会外在的数据库性能,如用户名,密码,URL等属性文件,然后使用DriverManager的工作以同样的方式?

并且在DataSource接口只建立在回去可以合用等连接的一种常见的方式? 在Java EE,并应用服务器实现这个接口和应用程序部署到对数据源,而不是连接的参考?

Answer 1:

更好的扩展性和维护

对于驱动程序管理器,你需要知道所有的细节(主机,端口,用户名,密码,驱动类)连接到数据库,并获得连接。 这些外部化的属性文件并不会更改,你需要知道他们实际上什么。

使用DataSource,你只需要知道的JNDI名称。 应用程序服务器关心的细节,而不是由客户端应用程序供应商配置,而是通过在应用程序托管的管理。

可扩展性:

假设你需要自己创建连接,您将如何应对不断变化的负载,有时有10位用户有时你1000,你不能只是得到一个连接时,你需要一个后来“释放”它,因此数据库服务器不会走出连接,从而导致你的连接池。 DriverManager的不提供它,数据源一样。

如果你要那么程序的连接池,你必须使用DriverManager的,与数据源,否则去了。



Answer 2:

DriverManager的。

  • 妨碍在Java类被创建的连接/关闭了应用程序性能。
  • 不支持连接池。

数据源

  • 提高应用程序的性能的连接不会创建/类内关闭,它们由应用服务器管理的,并且可以同时运行时获取。
  • 它提供了一种工具创建连接池
  • 对于企业应用程序有帮助


Answer 3:

下面的代码显示了用于获取连接双向的。

有没有必要了解一下的情况下,URL mySqlDataSource作为此行被注释掉。

public class MySqlDataSourceTest {

public static void main(String[] args) throws SQLException, ClassNotFoundException {


    /************** using MysqlDataSource starts **************/
    MysqlDataSource d = new MysqlDataSource();
    d.setUser("root");
    d.setPassword("root");
//  d.setUrl("jdbc:mysql://localhost:3306/manavrachna");
    d.setDatabaseName("manavrachna");
    Connection c =  (Connection) d.getConnection();
    /************** using MysqlDataSource ends**************/


    /************** using DriverManager start **************/
    Class.forName("com.mysql.jdbc.Driver");
    Connection c=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/manavrachna","root","root");
    /************** using DriverManager ends **************/

    Statement st=(Statement) c.createStatement();
    ResultSet rs=st.executeQuery("select id from employee");
    while(rs.next())
    {
        System.out.println(rs.getInt(1));
    }

}

}


Answer 4:

我们可以用一个数据源如下获取连接。 使用连接执行任何数据库查询。

DataSource datasource = (DataSource) new InitialContext().lookup(dataSourceName);
Connection connection = datasource.getConnection();


Answer 5:

数据源对象可以提供连接池和分布式事务,所以你可能有,如果你需要的一种或两种这些功能使用的数据源。



文章来源: Why do we use a DataSource instead of a DriverManager?