0

为什么 DataSource接口没有定义 JDBC- DataSource指定的标准数据源属性?

ds使用该类型的引用,DataSource我无法像这样设置以下属性:

public DbUtil(DataSource ds, String dbName, String port){
  ds.setServerName(dbName);
  ds.setPortNumber(port); 
}
4

3 回答 3

3

因为与普通 old 不同,您不应该传递这些值DriverManager。DataSource 通常在容器上配置,并且仅使用 JNDI 进行查找。

如果您再次开始传递这些值,它将破坏具有可配置数据源的全部意义。

这是来自 API 的引用。

DataSource 接口由驱动程序供应商实现。

DataSource 对象具有可在必要时修改的属性。例如,如果将数据源移动到不同的服务器,则可以更改服务器的属性。好处是因为可以更改数据源的属性,因此无需更改访问该数据源的任何代码。

于 2012-05-21T14:47:51.503 回答
1

因为在数据源上手动设置数据库名称或数据库配置没有意义,如果允许,它将在运行时破坏数据源功能,而在使用 Oracle 时,您想要更改服务器详细信息并且您将开始指向 Sybase .

这些参数应该提供给容器,您可以在运行时使用它们,允许覆盖或更改这些细节的机制太危险了。

这里要注意的另一件事是,如果这些属性成为合同的一部分,那么对于调用者来说它就是太多的信息,这不利于封装。

您的代码不需要知道这些细节是其配置的一部分。

于 2012-05-21T14:51:28.277 回答
1

JDBC 4.1 规范,第9.4.1节 DataSource Properties回答了您的问题:

DataSource 属性不打算由 JDBC 客户端直接访问。通过在实现类上而不是在应用程序使用的公共 DataSource 接口上定义访问方法,这种设计得到了加强。此外,客户端操作的对象可以是仅实现 DataSource 接口的包装器。属性的 setter 和 getter 方法不需要暴露给客户端。

驱动程序实现者也可以添加特定于其数据库的 setter/getter

于 2012-05-21T17:18:01.067 回答