18

我有两个选项来配置我的应用程序数据库连接 - 一个是使用 JDBC,另一个是使用 JNDI。就这些连接类型与数据库的工作速度而言,最佳选择是什么。

我了解这是使用不同原理的两种不同类型的数据库连接(JDBC 是直接 db 连接,JNDI 是应用程序服务器端的数据库连接池配置)。但是还有其他一般的 JDBC/JNDI 优缺点可能比运行速度更重要吗?如果是,它们是什么?

4

8 回答 8

32

数据库连接始终使用 JDBC。使用 JNDI,您可以在目录服务中注册一个数据源,该目录服务可以通过其名称进行查找。因此 JDBC 和 JNDI 完全不同,不可互换。

于 2012-07-16T08:05:46.233 回答
22

我敢打赌你的意思是选择

  1. 在您的应用程序中手动创建数据源或 jdbc 连接,或者
  2. 在容器中设置数据源,应用程序通过 JNDI 查找数据源

如果是这种情况,请尽可能坚持使用 2。

选择的主要原因绝不是性能差异。坚持 2 的原因在大多数情况下是,您需要 2 才能从容器中获得更高级的功能,例如分布式事务。

于 2012-07-16T08:11:57.157 回答
3

这就是我发现的关于 JNDI 和 JDBC 的内容。

JNDI:这是一种类似于电话簿的技术,用于远程搜索服务器和数据源上的名称。

JNDI 创建一个连接池。连接池是服务器上的一个环境,其中 JNDI 和数据库封装到其中以实现 Type4 连接。

JDBC:一种 Java API,使 Java 程序能够执行 SQL 语句。这允许 Java 程序与任何 SQL 兼容的数据库进行交互。

JDBC 类似于 ODBC,但专为 Java 程序设计,而 ODBC 与语言无关。

JDBC 由 Sun Microsystems 开发。JNDI 更快更高效。

于 2012-11-05T10:05:34.417 回答
2

这个问题并不完全清楚。

JNDI 不是一种数据库连接。您可以使用 JNDI 查找 DataSource,它是连接工厂。不过,DataSource 是 JDBC API 的一部分,因此 JNDI 与 JDBC 一起工作,而不是这里的替代品。

您是在谈论对数据库使用 JDBC 来获取目录信息,还是对 LDAP 存储库使用 JNDI?

于 2012-07-16T08:05:55.357 回答
2

真正的速度优势来自能够重用数据库连接。

因此,您需要使用一种提供数据库连接池的方法,然后使用适当的技术来访问池。根据实现,这可以是 JDBC(如果驱动程序本身支持它)或 JNDI 或完全不同的东西。

如果您的应用程序在 Web 容器中运行,则通常使用 JNDI 来允许在 Web 容器中而不是在您的应用程序中配置和管理池。

于 2012-07-16T08:08:35.723 回答
1

这个问题毫无意义。在什么方面更快?没有什么可以比较的。JDBC 是关系数据库的通用接口。JNDI 是命名系统的通用接口。很可能两者的效率都取决于与之通信的目标系统的 99%。在任何情况下,关系数据库和命名系统都满足完全不同的需求,这些需求在很大程度上是不可比的。通常使用 JNDI 来获取连接,然后使用 JDBC 来操作该连接。

于 2012-07-16T10:46:25.877 回答
1

前面的回答提到过,从技术上讲,使用Datasource和使用JDBC是一样的。

然而,使用数据源通常是首选的方式,因为这样您就可以让服务器管理您的数据库连接池。

于 2012-07-16T08:09:34.910 回答
1

是否使用连接池不会影响应用程序代码。它不需要对应用程序进行任何代码更改,因为应用程序会查找先前注册的数据源的 JNDI 名称。如果数据源在 JNDI 注册期间指定了连接池实现(如使用 DataDirect 连接池管理器创建数据源一节中所述),客户端应用程序将受益于通过连接池实现的更快连接。

于 2012-07-16T08:10:27.857 回答