我有两个选项来配置我的应用程序数据库连接 - 一个是使用 JDBC,另一个是使用 JNDI。就这些连接类型与数据库的工作速度而言,最佳选择是什么。
我了解这是使用不同原理的两种不同类型的数据库连接(JDBC 是直接 db 连接,JNDI 是应用程序服务器端的数据库连接池配置)。但是还有其他一般的 JDBC/JNDI 优缺点可能比运行速度更重要吗?如果是,它们是什么?
数据库连接始终使用 JDBC。使用 JNDI,您可以在目录服务中注册一个数据源,该目录服务可以通过其名称进行查找。因此 JDBC 和 JNDI 完全不同,不可互换。
我敢打赌你的意思是选择
如果是这种情况,请尽可能坚持使用 2。
选择的主要原因绝不是性能差异。坚持 2 的原因在大多数情况下是,您需要 2 才能从容器中获得更高级的功能,例如分布式事务。
这就是我发现的关于 JNDI 和 JDBC 的内容。
JNDI:这是一种类似于电话簿的技术,用于远程搜索服务器和数据源上的名称。
JNDI 创建一个连接池。连接池是服务器上的一个环境,其中 JNDI 和数据库封装到其中以实现 Type4 连接。
JDBC:一种 Java API,使 Java 程序能够执行 SQL 语句。这允许 Java 程序与任何 SQL 兼容的数据库进行交互。
JDBC 类似于 ODBC,但专为 Java 程序设计,而 ODBC 与语言无关。
JDBC 由 Sun Microsystems 开发。JNDI 更快更高效。
这个问题并不完全清楚。
JNDI 不是一种数据库连接。您可以使用 JNDI 查找 DataSource,它是连接工厂。不过,DataSource 是 JDBC API 的一部分,因此 JNDI 与 JDBC 一起工作,而不是这里的替代品。
您是在谈论对数据库使用 JDBC 来获取目录信息,还是对 LDAP 存储库使用 JNDI?
真正的速度优势来自能够重用数据库连接。
因此,您需要使用一种提供数据库连接池的方法,然后使用适当的技术来访问池。根据实现,这可以是 JDBC(如果驱动程序本身支持它)或 JNDI 或完全不同的东西。
如果您的应用程序在 Web 容器中运行,则通常使用 JNDI 来允许在 Web 容器中而不是在您的应用程序中配置和管理池。
这个问题毫无意义。在什么方面更快?没有什么可以比较的。JDBC 是关系数据库的通用接口。JNDI 是命名系统的通用接口。很可能两者的效率都取决于与之通信的目标系统的 99%。在任何情况下,关系数据库和命名系统都满足完全不同的需求,这些需求在很大程度上是不可比的。通常使用 JNDI 来获取连接,然后使用 JDBC 来操作该连接。
前面的回答提到过,从技术上讲,使用Datasource和使用JDBC是一样的。
然而,使用数据源通常是首选的方式,因为这样您就可以让服务器管理您的数据库连接池。
是否使用连接池不会影响应用程序代码。它不需要对应用程序进行任何代码更改,因为应用程序会查找先前注册的数据源的 JNDI 名称。如果数据源在 JNDI 注册期间指定了连接池实现(如使用 DataDirect 连接池管理器创建数据源一节中所述),客户端应用程序将受益于通过连接池实现的更快连接。