首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataSource属性

DataSource属性
EN

Stack Overflow用户
提问于 2012-05-21 22:44:35
回答 3查看 888关注 0票数 0

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

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

代码语言:javascript
复制
public DbUtil(DataSource ds, String dbName, String port){
  ds.setServerName(dbName);
  ds.setPortNumber(port); 
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-21 22:47:52

因为您不应该像普通的老式DriverManager那样传入这些值。DataSource通常配置在容器上,并且只能使用JNDI进行查找。

如果您再次开始传递这些值,那么拥有可配置DataSources的意义就大打折扣。

以下是API中的一句话。

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-05-21 22:51:28

由于手动设置数据源上的数据库名称或数据库配置没有任何意义,因此如果允许这样做,将在运行时中断数据源功能,而使用Oracle时,您想要更改服务器详细信息,并且您将开始指向Sybase。

这些参数应该提供给容器,您可以在运行时使用这些参数,允许机制覆盖或更改此类细节将非常危险。

这里要注意的另一件事是,如果这些属性成为协定的一部分,那么对于调用者来说,这就是太多的信息,这与封装是相反的。

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

票数 1
EN

Stack Overflow用户

发布于 2012-05-22 01:18:01

JDBC4.1规范的9.4.1 DataSource属性一节回答了您的问题:

JDBC客户端不能直接访问

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10687453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档